mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 02:32:50 +08:00
- 修复 未发布功能WhereObject/WhereItems 单条参数化;- 恢复 Repository.DataFilter Enable/Disable 功能;
This commit is contained in:
parent
1bc77db2b5
commit
d3904ffdd3
@ -577,9 +577,9 @@ namespace base_entity
|
|||||||
//.UseConnectionString(FreeSql.DataType.Firebird, @"database=localhost:D:\fbdata\EXAMPLES.fdb;user=sysdba;password=123456;max pool size=5")
|
//.UseConnectionString(FreeSql.DataType.Firebird, @"database=localhost:D:\fbdata\EXAMPLES.fdb;user=sysdba;password=123456;max pool size=5")
|
||||||
//.UseQuoteSqlName(false)
|
//.UseQuoteSqlName(false)
|
||||||
|
|
||||||
.UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;min pool size=1;Max pool size=3;AllowLoadLocalInfile=true")
|
//.UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;min pool size=1;Max pool size=3;AllowLoadLocalInfile=true")
|
||||||
|
|
||||||
//.UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Max Pool Size=3;TrustServerCertificate=true")
|
.UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Max Pool Size=3;TrustServerCertificate=true")
|
||||||
//.UseAdoConnectionPool(false)
|
//.UseAdoConnectionPool(false)
|
||||||
//.UseConnectionString(FreeSql.DataType.PostgreSQL, "Host=127.0.0.1;Port=5432;Username=postgres;Password=123456;Database=tedb;Pooling=true;Maximum Pool Size=2")
|
//.UseConnectionString(FreeSql.DataType.PostgreSQL, "Host=127.0.0.1;Port=5432;Username=postgres;Password=123456;Database=tedb;Pooling=true;Maximum Pool Size=2")
|
||||||
////.UseConnectionString(FreeSql.DataType.PostgreSQL, "Host=127.0.0.1;Port=5432;Username=postgres;Password=123456;Database=toc;Pooling=true;Maximum Pool Size=2")
|
////.UseConnectionString(FreeSql.DataType.PostgreSQL, "Host=127.0.0.1;Port=5432;Username=postgres;Password=123456;Database=toc;Pooling=true;Maximum Pool Size=2")
|
||||||
@ -620,6 +620,51 @@ namespace base_entity
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
var usergroupRepository = fsql.GetAggregateRootRepository<UserGroup>();
|
||||||
|
usergroupRepository.Delete(a => true);
|
||||||
|
usergroupRepository.Insert(new[]{
|
||||||
|
new UserGroup
|
||||||
|
{
|
||||||
|
CreateTime = DateTime.Now,
|
||||||
|
GroupName = "group1",
|
||||||
|
UpdateTime = DateTime.Now,
|
||||||
|
Sort = 1,
|
||||||
|
User1s = new List<User1>
|
||||||
|
{
|
||||||
|
new User1 { Nickname = "nickname11", Username = "username11", Description = "desc11" },
|
||||||
|
new User1 { Nickname = "nickname12", Username = "username12", Description = "desc12" },
|
||||||
|
new User1 { Nickname = "nickname13", Username = "username13", Description = "desc13" },
|
||||||
|
}
|
||||||
|
},
|
||||||
|
new UserGroup
|
||||||
|
{
|
||||||
|
CreateTime = DateTime.Now,
|
||||||
|
GroupName = "group2",
|
||||||
|
UpdateTime = DateTime.Now,
|
||||||
|
Sort = 2,
|
||||||
|
User1s = new List<User1>
|
||||||
|
{
|
||||||
|
new User1 { Nickname = "nickname21", Username = "username21", Description = "desc21" },
|
||||||
|
new User1 { Nickname = "nickname22", Username = "username22", Description = "desc22" },
|
||||||
|
new User1 { Nickname = "nickname23", Username = "username23", Description = "desc23" },
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
var ugroupFirst = usergroupRepository.Select.First();
|
||||||
|
ugroupFirst.Sort++;
|
||||||
|
usergroupRepository.Update(ugroupFirst);
|
||||||
|
var userRepository = fsql.GetAggregateRootRepository<User1>();
|
||||||
|
|
||||||
|
var testsublist1 = fsql.Select<UserGroup>()
|
||||||
|
.First(a => new
|
||||||
|
{
|
||||||
|
a.Id,
|
||||||
|
list = userRepository.Select.Where(b => b.GroupId == a.Id).ToList(),
|
||||||
|
list2 = userRepository.Select.Where(b => b.GroupId == a.Id).ToList(b => b.Nickname),
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
FreeSql.Internal.Utils.TypeHandlers.TryAdd(typeof(DateTimeOffset), new DateTimeOffsetTypeHandler());
|
FreeSql.Internal.Utils.TypeHandlers.TryAdd(typeof(DateTimeOffset), new DateTimeOffsetTypeHandler());
|
||||||
|
|
||||||
fsql.Insert(new Account { Name = DateTime.Now.ToString(), Join = DateTimeOffset.Now }).ExecuteAffrows();
|
fsql.Insert(new Account { Name = DateTime.Now.ToString(), Join = DateTimeOffset.Now }).ExecuteAffrows();
|
||||||
@ -1297,48 +1342,6 @@ var sql11111 = fsql.Select<Class1111>()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
var usergroupRepository = fsql.GetAggregateRootRepository<UserGroup>();
|
|
||||||
usergroupRepository.Delete(a => true);
|
|
||||||
usergroupRepository.Insert(new[]{
|
|
||||||
new UserGroup
|
|
||||||
{
|
|
||||||
CreateTime = DateTime.Now,
|
|
||||||
GroupName = "group1",
|
|
||||||
UpdateTime = DateTime.Now,
|
|
||||||
Sort = 1,
|
|
||||||
User1s = new List<User1>
|
|
||||||
{
|
|
||||||
new User1 { Nickname = "nickname11", Username = "username11", Description = "desc11" },
|
|
||||||
new User1 { Nickname = "nickname12", Username = "username12", Description = "desc12" },
|
|
||||||
new User1 { Nickname = "nickname13", Username = "username13", Description = "desc13" },
|
|
||||||
}
|
|
||||||
},
|
|
||||||
new UserGroup
|
|
||||||
{
|
|
||||||
CreateTime = DateTime.Now,
|
|
||||||
GroupName = "group2",
|
|
||||||
UpdateTime = DateTime.Now,
|
|
||||||
Sort = 2,
|
|
||||||
User1s = new List<User1>
|
|
||||||
{
|
|
||||||
new User1 { Nickname = "nickname21", Username = "username21", Description = "desc21" },
|
|
||||||
new User1 { Nickname = "nickname22", Username = "username22", Description = "desc22" },
|
|
||||||
new User1 { Nickname = "nickname23", Username = "username23", Description = "desc23" },
|
|
||||||
}
|
|
||||||
},
|
|
||||||
});
|
|
||||||
var ugroupFirst = usergroupRepository.Select.First();
|
|
||||||
ugroupFirst.Sort++;
|
|
||||||
usergroupRepository.Update(ugroupFirst);
|
|
||||||
var userRepository = fsql.GetAggregateRootRepository<User1>();
|
|
||||||
|
|
||||||
var testsublist1 = fsql.Select<UserGroup>()
|
|
||||||
.First(a => new
|
|
||||||
{
|
|
||||||
a.Id,
|
|
||||||
list = userRepository.Select.Where(b => b.GroupId == a.Id).ToList(),
|
|
||||||
list2 = userRepository.Select.Where(b => b.GroupId == a.Id).ToList(b => b.Nickname),
|
|
||||||
});
|
|
||||||
|
|
||||||
//fsql.CodeFirst.GetTableByEntity(typeof(User1)).Columns.Values.ToList().ForEach(col =>
|
//fsql.CodeFirst.GetTableByEntity(typeof(User1)).Columns.Values.ToList().ForEach(col =>
|
||||||
//{
|
//{
|
||||||
|
@ -56,6 +56,7 @@ namespace FreeSql
|
|||||||
_repository.DbContextOptions.EnableCascadeSave = false;
|
_repository.DbContextOptions.EnableCascadeSave = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public RepositoryDataFilter DataFilter => _repository.DataFilter;
|
||||||
public void AsType(Type entityType) => _repository.AsType(entityType);
|
public void AsType(Type entityType) => _repository.AsType(entityType);
|
||||||
Func<Type, string, string> _asTableRule;
|
Func<Type, string, string> _asTableRule;
|
||||||
public void AsTable(Func<string, string> rule)
|
public void AsTable(Func<string, string> rule)
|
||||||
@ -130,6 +131,7 @@ namespace FreeSql
|
|||||||
repo.UnitOfWork = UnitOfWork;
|
repo.UnitOfWork = UnitOfWork;
|
||||||
repo.DbContextOptions = DbContextOptions;
|
repo.DbContextOptions = DbContextOptions;
|
||||||
repo.DbContextOptions.EnableCascadeSave = false;
|
repo.DbContextOptions.EnableCascadeSave = false;
|
||||||
|
(repo as BaseRepository<object>).DataFilter = DataFilter;
|
||||||
repo.AsTable(_asTableRule);
|
repo.AsTable(_asTableRule);
|
||||||
return repo;
|
return repo;
|
||||||
}
|
}
|
||||||
|
@ -210,6 +210,7 @@ namespace FreeSql
|
|||||||
var affrows = 0;
|
var affrows = 0;
|
||||||
for (var a = tracking.DeleteLog.Count - 1; a >= 0; a--)
|
for (var a = tracking.DeleteLog.Count - 1; a >= 0; a--)
|
||||||
{
|
{
|
||||||
|
if (tracking.DeleteLog[a].Item2.Any() == false) continue;
|
||||||
var delete = Orm.Delete<object>().AsType(tracking.DeleteLog[a].Item1);
|
var delete = Orm.Delete<object>().AsType(tracking.DeleteLog[a].Item1);
|
||||||
if (_asTableRule != null) delete.AsTable(old => _asTableRule(tracking.DeleteLog[a].Item1, old));
|
if (_asTableRule != null) delete.AsTable(old => _asTableRule(tracking.DeleteLog[a].Item1, old));
|
||||||
affrows += await delete.WhereDynamic(tracking.DeleteLog[a].Item2).ExecuteAffrowsAsync(cancellationToken);
|
affrows += await delete.WhereDynamic(tracking.DeleteLog[a].Item2).ExecuteAffrowsAsync(cancellationToken);
|
||||||
@ -240,6 +241,7 @@ namespace FreeSql
|
|||||||
|
|
||||||
for (var a = tracking.DeleteLog.Count - 1; a >= 0; a--)
|
for (var a = tracking.DeleteLog.Count - 1; a >= 0; a--)
|
||||||
{
|
{
|
||||||
|
if (tracking.DeleteLog[a].Item2.Any() == false) continue;
|
||||||
var delete = Orm.Delete<object>().AsType(tracking.DeleteLog[a].Item1);
|
var delete = Orm.Delete<object>().AsType(tracking.DeleteLog[a].Item1);
|
||||||
if (_asTableRule != null) delete.AsTable(old => _asTableRule(tracking.DeleteLog[a].Item1, old));
|
if (_asTableRule != null) delete.AsTable(old => _asTableRule(tracking.DeleteLog[a].Item1, old));
|
||||||
affrows += await delete.WhereDynamic(tracking.DeleteLog[a].Item2).ExecuteAffrowsAsync(cancellationToken);
|
affrows += await delete.WhereDynamic(tracking.DeleteLog[a].Item2).ExecuteAffrowsAsync(cancellationToken);
|
||||||
|
@ -262,6 +262,7 @@ namespace FreeSql
|
|||||||
var affrows = 0;
|
var affrows = 0;
|
||||||
for (var a = tracking.DeleteLog.Count - 1; a >= 0; a--)
|
for (var a = tracking.DeleteLog.Count - 1; a >= 0; a--)
|
||||||
{
|
{
|
||||||
|
if (tracking.DeleteLog[a].Item2.Any() == false) continue;
|
||||||
var delete = Orm.Delete<object>().AsType(tracking.DeleteLog[a].Item1);
|
var delete = Orm.Delete<object>().AsType(tracking.DeleteLog[a].Item1);
|
||||||
if (_asTableRule != null) delete.AsTable(old => _asTableRule(tracking.DeleteLog[a].Item1, old));
|
if (_asTableRule != null) delete.AsTable(old => _asTableRule(tracking.DeleteLog[a].Item1, old));
|
||||||
affrows += delete.WhereDynamic(tracking.DeleteLog[a].Item2).ExecuteAffrows();
|
affrows += delete.WhereDynamic(tracking.DeleteLog[a].Item2).ExecuteAffrows();
|
||||||
@ -290,7 +291,8 @@ namespace FreeSql
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (var a = tracking.DeleteLog.Count - 1; a >= 0; a--)
|
for (var a = tracking.DeleteLog.Count - 1; a >= 0; a--)
|
||||||
{
|
{
|
||||||
|
if (tracking.DeleteLog[a].Item2.Any() == false) continue;
|
||||||
var delete = Orm.Delete<object>().AsType(tracking.DeleteLog[a].Item1);
|
var delete = Orm.Delete<object>().AsType(tracking.DeleteLog[a].Item1);
|
||||||
if (_asTableRule != null) delete.AsTable(old => _asTableRule(tracking.DeleteLog[a].Item1, old));
|
if (_asTableRule != null) delete.AsTable(old => _asTableRule(tracking.DeleteLog[a].Item1, old));
|
||||||
affrows += delete.WhereDynamic(tracking.DeleteLog[a].Item2).ExecuteAffrows();
|
affrows += delete.WhereDynamic(tracking.DeleteLog[a].Item2).ExecuteAffrows();
|
||||||
|
@ -487,6 +487,32 @@
|
|||||||
<typeparam name="TEntity"></typeparam>
|
<typeparam name="TEntity"></typeparam>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:FreeSql.RepositoryDataFilter.Disable(System.String[])">
|
||||||
|
<summary>
|
||||||
|
开启过滤器,若使用 using 则使用完后,恢复为原有状态
|
||||||
|
</summary>
|
||||||
|
<param name="filterName">过滤器名称</param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.RepositoryDataFilter.DisableAll">
|
||||||
|
<summary>
|
||||||
|
开启所有过滤器,若使用 using 则使用完后,恢复为原有状态
|
||||||
|
</summary>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.RepositoryDataFilter.Enable(System.String[])">
|
||||||
|
<summary>
|
||||||
|
禁用过滤器,若使用 using 则使用完后,恢复为原有状态
|
||||||
|
</summary>
|
||||||
|
<param name="filterName"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.RepositoryDataFilter.EnableAll">
|
||||||
|
<summary>
|
||||||
|
禁用所有过滤器,若使用 using 则使用完后,恢复为原有状态
|
||||||
|
</summary>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="M:FreeSql.IBaseRepository.AsType(System.Type)">
|
<member name="M:FreeSql.IBaseRepository.AsType(System.Type)">
|
||||||
<summary>
|
<summary>
|
||||||
动态Type,在使用 Repository<object> 后使用本方法,指定实体类型
|
动态Type,在使用 Repository<object> 后使用本方法,指定实体类型
|
||||||
@ -511,6 +537,11 @@
|
|||||||
设置 DbContext 选项
|
设置 DbContext 选项
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="P:FreeSql.IBaseRepository.DataFilter">
|
||||||
|
<summary>
|
||||||
|
GlobalFilter 禁用/启用控制
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
<member name="M:FreeSql.IBaseRepository`1.FlushState">
|
<member name="M:FreeSql.IBaseRepository`1.FlushState">
|
||||||
<summary>
|
<summary>
|
||||||
清空状态数据
|
清空状态数据
|
||||||
|
@ -32,6 +32,8 @@ namespace FreeSql
|
|||||||
{
|
{
|
||||||
var select = base.OrmSelect(dywhere);
|
var select = base.OrmSelect(dywhere);
|
||||||
if (_repo._asTablePriv != null) select.AsTable(_repo._asTablePriv);
|
if (_repo._asTablePriv != null) select.AsTable(_repo._asTablePriv);
|
||||||
|
var disableFilter = _repo.DataFilter._filtersByOrm.Where(a => a.Value.IsEnabled == false).Select(a => a.Key).ToArray();
|
||||||
|
if (disableFilter.Any()) select.DisableGlobalFilter(disableFilter);
|
||||||
return select;
|
return select;
|
||||||
}
|
}
|
||||||
internal ISelect<TEntity> OrmSelectInternal(object dywhere) => OrmSelect(dywhere);
|
internal ISelect<TEntity> OrmSelectInternal(object dywhere) => OrmSelect(dywhere);
|
||||||
@ -39,6 +41,8 @@ namespace FreeSql
|
|||||||
{
|
{
|
||||||
var update = base.OrmUpdate(entitys);
|
var update = base.OrmUpdate(entitys);
|
||||||
if (_repo._asTablePriv != null) update.AsTable(old => _repo._asTablePriv(_entityType, old));
|
if (_repo._asTablePriv != null) update.AsTable(old => _repo._asTablePriv(_entityType, old));
|
||||||
|
var disableFilter = _repo.DataFilter._filtersByOrm.Where(a => a.Value.IsEnabled == false).Select(a => a.Key).ToArray();
|
||||||
|
if (disableFilter.Any()) update.DisableGlobalFilter(disableFilter);
|
||||||
return update;
|
return update;
|
||||||
}
|
}
|
||||||
internal IUpdate<TEntity> OrmUpdateInternal(IEnumerable<TEntity> entitys) => OrmUpdate(entitys);
|
internal IUpdate<TEntity> OrmUpdateInternal(IEnumerable<TEntity> entitys) => OrmUpdate(entitys);
|
||||||
@ -46,6 +50,8 @@ namespace FreeSql
|
|||||||
{
|
{
|
||||||
var delete = base.OrmDelete(dywhere);
|
var delete = base.OrmDelete(dywhere);
|
||||||
if (_repo._asTablePriv != null) delete.AsTable(old => _repo._asTablePriv(_entityType, old));
|
if (_repo._asTablePriv != null) delete.AsTable(old => _repo._asTablePriv(_entityType, old));
|
||||||
|
var disableFilter = _repo.DataFilter._filtersByOrm.Where(a => a.Value.IsEnabled == false).Select(a => a.Key).ToArray();
|
||||||
|
if (disableFilter.Any()) delete.DisableGlobalFilter(disableFilter);
|
||||||
return delete;
|
return delete;
|
||||||
}
|
}
|
||||||
internal IDelete<TEntity> OrmDeleteInternal(object dywhere) => OrmDelete(dywhere);
|
internal IDelete<TEntity> OrmDeleteInternal(object dywhere) => OrmDelete(dywhere);
|
||||||
|
@ -22,6 +22,14 @@ namespace FreeSql
|
|||||||
protected BaseRepository(IFreeSql fsql)
|
protected BaseRepository(IFreeSql fsql)
|
||||||
{
|
{
|
||||||
_ormScoped = DbContextScopedFreeSql.Create(fsql, () => _db, () => UnitOfWork);
|
_ormScoped = DbContextScopedFreeSql.Create(fsql, () => _db, () => UnitOfWork);
|
||||||
|
fsql?.GlobalFilter?.GetAllFilters().ForEach(gf =>
|
||||||
|
{
|
||||||
|
DataFilter._filtersByOrm.TryAdd(gf.Name, new RepositoryDataFilter.FilterItemByOrm
|
||||||
|
{
|
||||||
|
Filter = gf,
|
||||||
|
IsEnabled = true
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
~BaseRepository() => this.Dispose();
|
~BaseRepository() => this.Dispose();
|
||||||
@ -55,6 +63,7 @@ namespace FreeSql
|
|||||||
_asTablePriv = rule;
|
_asTablePriv = rule;
|
||||||
}
|
}
|
||||||
public DbContextOptions DbContextOptions { get => _db.Options; set => _db.Options = value; }
|
public DbContextOptions DbContextOptions { get => _db.Options; set => _db.Options = value; }
|
||||||
|
public RepositoryDataFilter DataFilter { get; set; } = new RepositoryDataFilter();
|
||||||
|
|
||||||
internal DbContextScopedFreeSql _ormScoped;
|
internal DbContextScopedFreeSql _ormScoped;
|
||||||
internal IFreeSql OrmOriginal => _ormScoped?._originalFsql;
|
internal IFreeSql OrmOriginal => _ormScoped?._originalFsql;
|
||||||
|
148
FreeSql.DbContext/Repository/Repository/DataFilter.cs
Normal file
148
FreeSql.DbContext/Repository/Repository/DataFilter.cs
Normal file
@ -0,0 +1,148 @@
|
|||||||
|
using FreeSql.Internal;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Concurrent;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Linq.Expressions;
|
||||||
|
|
||||||
|
namespace FreeSql
|
||||||
|
{
|
||||||
|
public class RepositoryDataFilter
|
||||||
|
{
|
||||||
|
internal class FilterItemByOrm
|
||||||
|
{
|
||||||
|
public GlobalFilter.Item Filter { get; set; }
|
||||||
|
public bool IsEnabled { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
internal ConcurrentDictionary<string, FilterItemByOrm> _filtersByOrm = new ConcurrentDictionary<string, FilterItemByOrm>(StringComparer.CurrentCultureIgnoreCase);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 开启过滤器,若使用 using 则使用完后,恢复为原有状态
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="filterName">过滤器名称</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public IDisposable Disable(params string[] filterName)
|
||||||
|
{
|
||||||
|
if (filterName == null || filterName.Any() == false) return new UsingAny(() => { });
|
||||||
|
|
||||||
|
List<string> restoreByOrm = new List<string>();
|
||||||
|
foreach (var name in filterName)
|
||||||
|
{
|
||||||
|
if (_filtersByOrm.TryGetValue(name, out var tryfiByOrm))
|
||||||
|
{
|
||||||
|
if (tryfiByOrm.IsEnabled)
|
||||||
|
{
|
||||||
|
restoreByOrm.Add(name);
|
||||||
|
tryfiByOrm.IsEnabled = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return new UsingAny(() =>
|
||||||
|
{
|
||||||
|
restoreByOrm.ForEach(name =>
|
||||||
|
{
|
||||||
|
if (_filtersByOrm.TryGetValue(name, out var tryfiByOrm) && tryfiByOrm.IsEnabled == false)
|
||||||
|
tryfiByOrm.IsEnabled = true;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 开启所有过滤器,若使用 using 则使用完后,恢复为原有状态
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public IDisposable DisableAll()
|
||||||
|
{
|
||||||
|
List<string> restoreByOrm = new List<string>();
|
||||||
|
foreach (var val in _filtersByOrm)
|
||||||
|
{
|
||||||
|
if (val.Value.IsEnabled)
|
||||||
|
{
|
||||||
|
restoreByOrm.Add(val.Key);
|
||||||
|
val.Value.IsEnabled = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return new UsingAny(() =>
|
||||||
|
{
|
||||||
|
restoreByOrm.ForEach(name =>
|
||||||
|
{
|
||||||
|
if (_filtersByOrm.TryGetValue(name, out var tryfiByOrm) && tryfiByOrm.IsEnabled == false)
|
||||||
|
tryfiByOrm.IsEnabled = true;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
class UsingAny : IDisposable
|
||||||
|
{
|
||||||
|
Action _ondis;
|
||||||
|
public UsingAny(Action ondis)
|
||||||
|
{
|
||||||
|
_ondis = ondis;
|
||||||
|
}
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
_ondis?.Invoke();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 禁用过滤器,若使用 using 则使用完后,恢复为原有状态
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="filterName"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public IDisposable Enable(params string[] filterName)
|
||||||
|
{
|
||||||
|
if (filterName == null || filterName.Any() == false) return new UsingAny(() => { });
|
||||||
|
|
||||||
|
List<string> restoreByOrm = new List<string>();
|
||||||
|
foreach (var name in filterName)
|
||||||
|
{
|
||||||
|
if (_filtersByOrm.TryGetValue(name, out var tryfiByOrm))
|
||||||
|
{
|
||||||
|
if (tryfiByOrm.IsEnabled == false)
|
||||||
|
{
|
||||||
|
restoreByOrm.Add(name);
|
||||||
|
tryfiByOrm.IsEnabled = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return new UsingAny(() =>
|
||||||
|
{
|
||||||
|
restoreByOrm.ForEach(name =>
|
||||||
|
{
|
||||||
|
if (_filtersByOrm.TryGetValue(name, out var tryfiByOrm) && tryfiByOrm.IsEnabled == true)
|
||||||
|
tryfiByOrm.IsEnabled = false;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 禁用所有过滤器,若使用 using 则使用完后,恢复为原有状态
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public IDisposable EnableAll()
|
||||||
|
{
|
||||||
|
List<string> restoreByOrm = new List<string>();
|
||||||
|
foreach (var val in _filtersByOrm)
|
||||||
|
{
|
||||||
|
if (val.Value.IsEnabled == false)
|
||||||
|
{
|
||||||
|
restoreByOrm.Add(val.Key);
|
||||||
|
val.Value.IsEnabled = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return new UsingAny(() =>
|
||||||
|
{
|
||||||
|
restoreByOrm.ForEach(name =>
|
||||||
|
{
|
||||||
|
if (_filtersByOrm.TryGetValue(name, out var tryfiByOrm) && tryfiByOrm.IsEnabled == true)
|
||||||
|
tryfiByOrm.IsEnabled = false;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsEnabled(string filterName)
|
||||||
|
{
|
||||||
|
if (filterName == null) return false;
|
||||||
|
return _filtersByOrm.TryGetValue(filterName, out var tryfiByOrm) ? tryfiByOrm.IsEnabled : false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -34,6 +34,10 @@ namespace FreeSql
|
|||||||
/// 设置 DbContext 选项
|
/// 设置 DbContext 选项
|
||||||
/// </summary>
|
/// </summary>
|
||||||
DbContextOptions DbContextOptions { get; set; }
|
DbContextOptions DbContextOptions { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// GlobalFilter 禁用/启用控制
|
||||||
|
/// </summary>
|
||||||
|
RepositoryDataFilter DataFilter { get; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface IBaseRepository<TEntity> : IBaseRepository
|
public interface IBaseRepository<TEntity> : IBaseRepository
|
||||||
|
@ -470,8 +470,9 @@ namespace FreeSql.Internal
|
|||||||
filter += $"{(colidx > 0 ? " AND " : "")}{aliasAndDot}{this.QuoteSqlName(col.Attribute.Name)} = ";
|
filter += $"{(colidx > 0 ? " AND " : "")}{aliasAndDot}{this.QuoteSqlName(col.Attribute.Name)} = ";
|
||||||
if (CodeFirst.IsGenerateCommandParameterWithLambda && dbParams != null) //v3.5.100 单条支持参数化
|
if (CodeFirst.IsGenerateCommandParameterWithLambda && dbParams != null) //v3.5.100 单条支持参数化
|
||||||
{
|
{
|
||||||
AppendParamter(dbParams, null, col, col.Attribute.MapType, colval);
|
var paramName = $"exp_{dbParams.Count}";
|
||||||
filter += RewriteColumn(col, QuoteWriteParamterAdapter(col.Attribute.MapType, QuoteParamterName($"exp_{dbParams.Count}")));
|
AppendParamter(dbParams, paramName, col, col.Attribute.MapType, colval);
|
||||||
|
filter += RewriteColumn(col, QuoteWriteParamterAdapter(col.Attribute.MapType, QuoteParamterName(paramName)));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
filter += RewriteColumn(col, GetNoneParamaterSqlValue(null, null, col, col.Attribute.MapType, colval));
|
filter += RewriteColumn(col, GetNoneParamaterSqlValue(null, null, col, col.Attribute.MapType, colval));
|
||||||
@ -592,8 +593,9 @@ namespace FreeSql.Internal
|
|||||||
filter += $"{aliasAndDot}{this.QuoteSqlName(pk.Attribute.Name)} = ";
|
filter += $"{aliasAndDot}{this.QuoteSqlName(pk.Attribute.Name)} = ";
|
||||||
if (CodeFirst.IsGenerateCommandParameterWithLambda && dbParams != null) //v3.5.100 单条支持参数化
|
if (CodeFirst.IsGenerateCommandParameterWithLambda && dbParams != null) //v3.5.100 单条支持参数化
|
||||||
{
|
{
|
||||||
AppendParamter(dbParams, null, primarys[0], primarys[0].Attribute.MapType, pkval);
|
var paramName = $"exp_{dbParams.Count}";
|
||||||
filter += RewriteColumn(pk, QuoteWriteParamterAdapter(primarys[0].Attribute.MapType, QuoteParamterName($"exp_{dbParams.Count}")));
|
AppendParamter(dbParams, paramName, primarys[0], primarys[0].Attribute.MapType, pkval);
|
||||||
|
filter += RewriteColumn(pk, QuoteWriteParamterAdapter(primarys[0].Attribute.MapType, QuoteParamterName(paramName)));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
filter += RewriteColumn(pk, GetNoneParamaterSqlValue(null, null, pk, pk.Attribute.MapType, pkval));
|
filter += RewriteColumn(pk, GetNoneParamaterSqlValue(null, null, pk, pk.Attribute.MapType, pkval));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user