From afd489c0db8819fe70ed704bd80c9cd8f87dd359 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Thu, 4 Mar 2021 14:21:11 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20v2.3.100=20GlobalFilte?= =?UTF-8?q?r=20=E5=9C=A8=20Repository=20=E5=A4=B1=E6=95=88=E7=9A=84=20bug?= =?UTF-8?q?=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Repository/ContextSet/RepositoryDbSet.cs | 22 ++++++++++++------- FreeSql.Tests/FreeSql.Tests/UnitTest2.cs | 13 +++++++++++ 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/FreeSql.DbContext/Repository/ContextSet/RepositoryDbSet.cs b/FreeSql.DbContext/Repository/ContextSet/RepositoryDbSet.cs index 260cbd6e..159988a7 100644 --- a/FreeSql.DbContext/Repository/ContextSet/RepositoryDbSet.cs +++ b/FreeSql.DbContext/Repository/ContextSet/RepositoryDbSet.cs @@ -18,16 +18,18 @@ namespace FreeSql protected override ISelect OrmSelect(object dywhere) { - var select = base.OrmSelect(dywhere); + var select = base.OrmSelect(dywhere).AsTable(_repo.AsTableSelectValueInternal); var filters = (_repo.DataFilter as DataFilter)._filters; 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 OrmSelectInternal(object dywhere) => OrmSelect(dywhere); protected override IUpdate OrmUpdate(IEnumerable entitys) { - var update = base.OrmUpdate(entitys); + var update = base.OrmUpdate(entitys).AsTable(_repo.AsTableValueInternal); var filters = (_repo.DataFilter as DataFilter)._filters; 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)}"); 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 OrmUpdateInternal(IEnumerable entitys) => OrmUpdate(entitys); protected override IDelete OrmDelete(object dywhere) { - var delete = base.OrmDelete(dywhere); + var delete = base.OrmDelete(dywhere).AsTable(_repo.AsTableValueInternal); var filters = (_repo.DataFilter as DataFilter)._filters; 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 OrmDeleteInternal(object dywhere) => OrmDelete(dywhere); protected override IInsert OrmInsert(TEntity entity) => OrmInsert(new[] { entity }); protected override IInsert OrmInsert(IEnumerable entitys) { - var insert = base.OrmInsert(entitys); + var insert = base.OrmInsert(entitys).AsTable(_repo.AsTableValueInternal); var filters = (_repo.DataFilter as DataFilter)._filters.Where(a => a.Value.IsEnabled == true); foreach (var filter in filters) { @@ -60,7 +66,7 @@ namespace FreeSql if (filter.Value.ExpressionDelegate?.Invoke(entity) == false) 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 OrmInsertInternal(TEntity entity) => OrmInsert(entity); internal IInsert OrmInsertInternal(IEnumerable entitys) => OrmInsert(entitys); diff --git a/FreeSql.Tests/FreeSql.Tests/UnitTest2.cs b/FreeSql.Tests/FreeSql.Tests/UnitTest2.cs index a8dc0eb7..48d33b79 100644 --- a/FreeSql.Tests/FreeSql.Tests/UnitTest2.cs +++ b/FreeSql.Tests/FreeSql.Tests/UnitTest2.cs @@ -252,6 +252,19 @@ namespace FreeSql.Tests [Fact] public void Test02() { + g.sqlite.GlobalFilter + .Apply("id2", a => a.name == "123"); + + var sqlo1 = g.sqlite.Select() + .InnerJoin((a, b, c) => a.id == b.id) + .InnerJoin((a, b, c) => b.id == c.id) + .ToSql(); + + var sqlo2 = g.sqlite.GetRepository() + .Select + .ToSql(); + + g.sqlite.GlobalFilter .ApplyOnly("id1", a => a.name == "123");