- 增加 using DataFilter.Disable、Enable 使用完成后恢复可用状态;#9

This commit is contained in:
28810 2019-03-12 16:54:17 +08:00
parent acf6fa0391
commit f653f03073
3 changed files with 71 additions and 24 deletions

View File

@ -10,11 +10,29 @@ namespace FreeSql {
IDataFilter<TEntity> Apply(string filterName, Expression<Func<TEntity, bool>> filterAndValidateExp); IDataFilter<TEntity> Apply(string filterName, Expression<Func<TEntity, bool>> filterAndValidateExp);
IDataFilter<TEntity> Enable(params string[] filterName); /// <summary>
IDataFilter<TEntity> EnableAll(); /// 开启过滤器,若使用 using 则使用完后,恢复为原有状态
/// </summary>
/// <param name="filterName">过滤器名称</param>
/// <returns></returns>
IDisposable Enable(params string[] filterName);
/// <summary>
/// 开启所有过滤器,若使用 using 则使用完后,恢复为原有状态
/// </summary>
/// <returns></returns>
IDisposable EnableAll();
IDataFilter<TEntity> Disable(params string[] filterName); /// <summary>
IDataFilter<TEntity> DisableAll(); /// 禁用过滤器,若使用 using 则使用完后,恢复为原有状态
/// </summary>
/// <param name="filterName"></param>
/// <returns></returns>
IDisposable Disable(params string[] filterName);
/// <summary>
/// 禁用所有过滤器,若使用 using 则使用完后,恢复为原有状态
/// </summary>
/// <returns></returns>
IDisposable DisableAll();
bool IsEnabled(string filterName); bool IsEnabled(string filterName);
} }
@ -40,34 +58,63 @@ namespace FreeSql {
return this; return this;
} }
public IDataFilter<TEntity> Disable(params string[] filterName) { public IDisposable Disable(params string[] filterName) {
if (filterName == null || filterName.Any() == false) return this; if (filterName == null || filterName.Any() == false) return new UsingAny(() => { });
List<string> restore = new List<string>();
foreach (var name in filterName) { foreach (var name in filterName) {
if (_filters.TryGetValue(name, out var tryfi)) if (_filters.TryGetValue(name, out var tryfi)) {
tryfi.IsEnabled = false; if (tryfi.IsEnabled) {
restore.Add(name);
tryfi.IsEnabled = false;
}
}
} }
return this; return new UsingAny(() => this.Enable(restore.ToArray()));
} }
public IDataFilter<TEntity> DisableAll() { public IDisposable DisableAll() {
foreach (var val in _filters.Values.ToArray()) List<string> restore = new List<string>();
val.IsEnabled = false; foreach (var val in _filters) {
return this; if (val.Value.IsEnabled) {
restore.Add(val.Key);
val.Value.IsEnabled = false;
}
}
return new UsingAny(() => this.Enable(restore.ToArray()));
}
class UsingAny : IDisposable {
Action _ondis;
public UsingAny(Action ondis) {
_ondis = ondis;
}
public void Dispose() {
_ondis?.Invoke();
}
} }
public IDataFilter<TEntity> Enable(params string[] filterName) { public IDisposable Enable(params string[] filterName) {
if (filterName == null || filterName.Any() == false) return this; if (filterName == null || filterName.Any() == false) return new UsingAny(() => { });
List<string> restore = new List<string>();
foreach (var name in filterName) { foreach (var name in filterName) {
if (_filters.TryGetValue(name, out var tryfi)) if (_filters.TryGetValue(name, out var tryfi)) {
tryfi.IsEnabled = true; if (tryfi.IsEnabled == false) {
restore.Add(name);
tryfi.IsEnabled = true;
}
}
} }
return this; return new UsingAny(() => this.Disable(restore.ToArray()));
} }
public IDataFilter<TEntity> EnableAll() { public IDisposable EnableAll() {
foreach (var val in _filters.Values.ToArray()) List<string> restore = new List<string>();
val.IsEnabled = true; foreach (var val in _filters) {
return this; if (val.Value.IsEnabled == false) {
restore.Add(val.Key);
val.Value.IsEnabled = true;
}
}
return new UsingAny(() => this.Disable(restore.ToArray()));
} }
public bool IsEnabled(string filterName) { public bool IsEnabled(string filterName) {

View File

@ -2,7 +2,7 @@
<PropertyGroup> <PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework> <TargetFramework>netstandard2.0</TargetFramework>
<Version>0.3.13</Version> <Version>0.3.13.1</Version>
<Authors>YeXiangQin</Authors> <Authors>YeXiangQin</Authors>
<Description>FreeSql 通用仓库层实现,支持 MySql/SqlServer/PostgreSQL/Oracle/Sqlite读写分离、分表分库。</Description> <Description>FreeSql 通用仓库层实现,支持 MySql/SqlServer/PostgreSQL/Oracle/Sqlite读写分离、分表分库。</Description>
<PackageProjectUrl>https://github.com/2881099/FreeSql</PackageProjectUrl> <PackageProjectUrl>https://github.com/2881099/FreeSql</PackageProjectUrl>

View File

@ -2,7 +2,7 @@
<PropertyGroup> <PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework> <TargetFramework>netstandard2.0</TargetFramework>
<Version>0.3.13</Version> <Version>0.3.13.1</Version>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild> <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Authors>YeXiangQin</Authors> <Authors>YeXiangQin</Authors>
<Description>打造 .NETCore 最方便的 ORMDbFirst 与 CodeFirst 混合使用,提供从实体同步数据库,或者从数据库生成实体代码,支持 MySql/SqlServer/PostgreSQL/Oracle/Sqlite读写分离、分表分库。</Description> <Description>打造 .NETCore 最方便的 ORMDbFirst 与 CodeFirst 混合使用,提供从实体同步数据库,或者从数据库生成实体代码,支持 MySql/SqlServer/PostgreSQL/Oracle/Sqlite读写分离、分表分库。</Description>