- 修复 v2.3.100 GlobalFilter 在 Repository 失效的 bug;

This commit is contained in:
2881099 2021-03-04 14:21:11 +08:00
parent f11419d0d2
commit afd489c0db
2 changed files with 27 additions and 8 deletions

View File

@ -18,16 +18,18 @@ namespace FreeSql
protected override ISelect<TEntity> OrmSelect(object dywhere) protected override ISelect<TEntity> OrmSelect(object dywhere)
{ {
var select = base.OrmSelect(dywhere); var select = base.OrmSelect(dywhere).AsTable(_repo.AsTableSelectValueInternal);
var filters = (_repo.DataFilter as DataFilter<TEntity>)._filters; var filters = (_repo.DataFilter as DataFilter<TEntity>)._filters;
foreach (var filter in filters.Where(a => a.Value.IsEnabled == true)) select.Where(filter.Value.Expression); foreach (var filter in filters.Where(a => a.Value.IsEnabled == true)) select.Where(filter.Value.Expression);
return select.AsTable(_repo.AsTableSelectValueInternal).DisableGlobalFilter(filters.Where(a => a.Value.IsEnabled == false).Select(a => a.Key).ToArray()); var disableFilter = filters.Where(a => a.Value.IsEnabled == false).Select(a => a.Key).ToArray();
if (disableFilter.Any()) select.DisableGlobalFilter();
return select;
} }
internal ISelect<TEntity> OrmSelectInternal(object dywhere) => OrmSelect(dywhere); internal ISelect<TEntity> OrmSelectInternal(object dywhere) => OrmSelect(dywhere);
protected override IUpdate<TEntity> OrmUpdate(IEnumerable<TEntity> entitys) protected override IUpdate<TEntity> OrmUpdate(IEnumerable<TEntity> entitys)
{ {
var update = base.OrmUpdate(entitys); var update = base.OrmUpdate(entitys).AsTable(_repo.AsTableValueInternal);
var filters = (_repo.DataFilter as DataFilter<TEntity>)._filters; var filters = (_repo.DataFilter as DataFilter<TEntity>)._filters;
foreach (var filter in filters.Where(a => a.Value.IsEnabled == true)) foreach (var filter in filters.Where(a => a.Value.IsEnabled == true))
{ {
@ -37,21 +39,25 @@ namespace FreeSql
throw new Exception($"FreeSql.Repository Update 失败,因为设置了过滤器 {filter.Key}: {filter.Value.Expression},更新的数据不符合 {_db.OrmOriginal.GetEntityString(_entityType, entity)}"); throw new Exception($"FreeSql.Repository Update 失败,因为设置了过滤器 {filter.Key}: {filter.Value.Expression},更新的数据不符合 {_db.OrmOriginal.GetEntityString(_entityType, entity)}");
update.Where(filter.Value.Expression); update.Where(filter.Value.Expression);
} }
return update.AsTable(_repo.AsTableValueInternal).DisableGlobalFilter(filters.Where(a => a.Value.IsEnabled == false).Select(a => a.Key).ToArray()); var disableFilter = filters.Where(a => a.Value.IsEnabled == false).Select(a => a.Key).ToArray();
if (disableFilter.Any()) update.DisableGlobalFilter();
return update;
} }
internal IUpdate<TEntity> OrmUpdateInternal(IEnumerable<TEntity> entitys) => OrmUpdate(entitys); internal IUpdate<TEntity> OrmUpdateInternal(IEnumerable<TEntity> entitys) => OrmUpdate(entitys);
protected override IDelete<TEntity> OrmDelete(object dywhere) protected override IDelete<TEntity> OrmDelete(object dywhere)
{ {
var delete = base.OrmDelete(dywhere); var delete = base.OrmDelete(dywhere).AsTable(_repo.AsTableValueInternal);
var filters = (_repo.DataFilter as DataFilter<TEntity>)._filters; var filters = (_repo.DataFilter as DataFilter<TEntity>)._filters;
foreach (var filter in filters.Where(a => a.Value.IsEnabled == true)) delete.Where(filter.Value.Expression); foreach (var filter in filters.Where(a => a.Value.IsEnabled == true)) delete.Where(filter.Value.Expression);
return delete.AsTable(_repo.AsTableValueInternal).DisableGlobalFilter(filters.Where(a => a.Value.IsEnabled == false).Select(a => a.Key).ToArray()); var disableFilter = filters.Where(a => a.Value.IsEnabled == false).Select(a => a.Key).ToArray();
if (disableFilter.Any()) delete.DisableGlobalFilter();
return delete;
} }
internal IDelete<TEntity> OrmDeleteInternal(object dywhere) => OrmDelete(dywhere); internal IDelete<TEntity> OrmDeleteInternal(object dywhere) => OrmDelete(dywhere);
protected override IInsert<TEntity> OrmInsert(TEntity entity) => OrmInsert(new[] { entity }); protected override IInsert<TEntity> OrmInsert(TEntity entity) => OrmInsert(new[] { entity });
protected override IInsert<TEntity> OrmInsert(IEnumerable<TEntity> entitys) protected override IInsert<TEntity> OrmInsert(IEnumerable<TEntity> entitys)
{ {
var insert = base.OrmInsert(entitys); var insert = base.OrmInsert(entitys).AsTable(_repo.AsTableValueInternal);
var filters = (_repo.DataFilter as DataFilter<TEntity>)._filters.Where(a => a.Value.IsEnabled == true); var filters = (_repo.DataFilter as DataFilter<TEntity>)._filters.Where(a => a.Value.IsEnabled == true);
foreach (var filter in filters) foreach (var filter in filters)
{ {
@ -60,7 +66,7 @@ namespace FreeSql
if (filter.Value.ExpressionDelegate?.Invoke(entity) == false) if (filter.Value.ExpressionDelegate?.Invoke(entity) == false)
throw new Exception($"FreeSql.Repository Insert 失败,因为设置了过滤器 {filter.Key}: {filter.Value.Expression},插入的数据不符合 {_db.OrmOriginal.GetEntityString(_entityType, entity)}"); throw new Exception($"FreeSql.Repository Insert 失败,因为设置了过滤器 {filter.Key}: {filter.Value.Expression},插入的数据不符合 {_db.OrmOriginal.GetEntityString(_entityType, entity)}");
} }
return insert.AsTable(_repo.AsTableValueInternal); return insert;
} }
internal IInsert<TEntity> OrmInsertInternal(TEntity entity) => OrmInsert(entity); internal IInsert<TEntity> OrmInsertInternal(TEntity entity) => OrmInsert(entity);
internal IInsert<TEntity> OrmInsertInternal(IEnumerable<TEntity> entitys) => OrmInsert(entitys); internal IInsert<TEntity> OrmInsertInternal(IEnumerable<TEntity> entitys) => OrmInsert(entitys);

View File

@ -252,6 +252,19 @@ namespace FreeSql.Tests
[Fact] [Fact]
public void Test02() public void Test02()
{ {
g.sqlite.GlobalFilter
.Apply<otot1>("id2", a => a.name == "123");
var sqlo1 = g.sqlite.Select<otot1, otot2, otot3>()
.InnerJoin((a, b, c) => a.id == b.id)
.InnerJoin((a, b, c) => b.id == c.id)
.ToSql();
var sqlo2 = g.sqlite.GetRepository<otot3>()
.Select
.ToSql();
g.sqlite.GlobalFilter g.sqlite.GlobalFilter
.ApplyOnly<otot1>("id1", a => a.name == "123"); .ApplyOnly<otot1>("id1", a => a.name == "123");