diff --git a/Examples/base_entity/Program.cs b/Examples/base_entity/Program.cs
index 95dd884c..dcad4573 100644
--- a/Examples/base_entity/Program.cs
+++ b/Examples/base_entity/Program.cs
@@ -446,6 +446,7 @@ namespace base_entity
sqss2 = fsql.InsertDict(diclist).AsTable("table1").NoneParameter(false).ToSql();
dic["xxx"] = null;
+ dic["yyy"] = 111;
var sqlupd1 = fsql.UpdateDict(dic).AsTable("table1").WherePrimary("id").ToSql();
var sqlupd2 = fsql.UpdateDict(diclist).AsTable("table1").WherePrimary("id").ToSql();
var sqlupd11 = fsql.UpdateDict(dic).AsTable("table1").WherePrimary("id").NoneParameter(false).ToSql();
diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml
index 26522f10..594fbad3 100644
--- a/FreeSql.DbContext/FreeSql.DbContext.xml
+++ b/FreeSql.DbContext/FreeSql.DbContext.xml
@@ -733,15 +733,6 @@
-
-
- 根据Assembly扫描所有继承IEntityTypeConfiguration<T>的配置类
-
-
-
-
-
-
创建普通数据上下文档对象
@@ -800,14 +791,5 @@
-
-
- 批量注入 Repository,可以参考代码自行调整
-
-
-
-
-
-
diff --git a/FreeSql.DbContext/Repository/Repository/BaseRepository.cs b/FreeSql.DbContext/Repository/Repository/BaseRepository.cs
index 5770ed5a..6f697777 100644
--- a/FreeSql.DbContext/Repository/Repository/BaseRepository.cs
+++ b/FreeSql.DbContext/Repository/Repository/BaseRepository.cs
@@ -30,7 +30,7 @@ namespace FreeSql
DataFilter.Apply("", filter);
AsTable(asTable);
- fsql.GlobalFilter.GetFilters().ForEach(gf =>
+ fsql.GlobalFilter.GetAllFilters().ForEach(gf =>
{
(DataFilter as DataFilter)._filtersByOrm.TryAdd(gf.Name, new DataFilter.FilterItemByOrm
{
diff --git a/FreeSql.Tests/FreeSql.Tests.DbContext/RepositoryTests02.cs b/FreeSql.Tests/FreeSql.Tests.DbContext/RepositoryTests02.cs
new file mode 100644
index 00000000..b6a58465
--- /dev/null
+++ b/FreeSql.Tests/FreeSql.Tests.DbContext/RepositoryTests02.cs
@@ -0,0 +1,153 @@
+using FreeSql.DataAnnotations;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using Xunit;
+
+namespace FreeSql.Tests.DbContext
+{
+ public class RepositoryTests02
+ {
+ [Fact]
+ public void TestMethod1()
+ {
+ using (IFreeSql fsql = new FreeSql.FreeSqlBuilder()
+ .UseConnectionString(FreeSql.DataType.Sqlite, @"Data Source=:memory:")
+ .UseMonitorCommand(cmd => Trace.WriteLine($"Sql:{cmd.CommandText}"))//监听SQL语句
+ .UseAutoSyncStructure(true) //自动同步实体结构到数据库,FreeSql不会扫描程序集,只有CRUD时才会生成表。
+ .Build())
+ {
+ fsql.GlobalFilter.ApplyIf("TenantFilter", () => TenantManager.Current > 0, a => a.TenantId == TenantManager.Current);
+
+ fsql.Aop.AuditValue += (_, e) =>
+ {
+ if (TenantManager.Current > 0 && e.Property.PropertyType == typeof(int) && e.Property.Name == "TenantId")
+ {
+ e.Value = TenantManager.Current;
+ };
+ };
+
+ IBaseRepository resp = fsql.GetRepository();
+ resp.Delete(a => a.ID != null);
+ Assert.True(resp != null);
+
+
+
+ TenantManager.Current = 1;
+
+ resp.InsertOrUpdate(new User()
+ {
+ uname = "zhaoqin",
+ });
+
+ resp.InsertOrUpdate(new User()
+ {
+ uname = "wanghuan",
+ });
+ long cc = resp.Where(a => a.ID != null).Count();
+ Assert.True(cc == 2);
+
+
+
+ TenantManager.Current = 2;
+
+ resp.InsertOrUpdate(new User()
+ {
+ uname = "zhaoqin1",
+ });
+
+ resp.InsertOrUpdate(new User()
+ {
+ uname = "wanghuan1",
+ });
+ long c = resp.Where(a => a.ID != null).Count();
+ Assert.True(c == 2);
+
+
+
+ TenantManager.Current = 0;
+
+ Assert.True(resp.Where(a => a.ID != null).Count() == 4);
+
+
+ //多租户启用,但表达式想取消,这个可以成功
+ TenantManager.Current = 2;
+ long count1 = fsql.Select().DisableGlobalFilter().Count();
+ Assert.True(count1 == 4);
+
+
+ Console.WriteLine("仓储的过滤器禁止,但不成功.");
+ //仓储的过滤器禁止,但不成功.
+ using (resp.DataFilter.DisableAll())
+ {
+
+ long count2 = resp.Where(a => a.ID != null).Count();
+
+ Assert.True(count2 == 4);
+ }
+
+ }
+ }
+
+
+ public class TenantManager
+ {
+ // 注意一定是 static 静态化
+ static AsyncLocal _asyncLocal = new AsyncLocal();
+
+ public static int Current
+ {
+ get => _asyncLocal.Value;
+ set => _asyncLocal.Value = value;
+ }
+ }
+
+ public class BaseModel
+ {
+ [Column(IsIdentity = true)]
+ public int? ID { get; set; }
+ public int TenantId { get; set; }
+ }
+
+ public class User : BaseModel
+ {
+
+ public Guid cateId { get; set; }
+ public Cate cate { get; set; }
+
+ public string uname { get; set; }
+ public int age { get; set; }
+
+ public List groups { get; set; } = new List();
+ }
+
+ public class Cate : BaseModel
+ {
+ public string catename { get; set; }
+
+ public List users { get; set; }
+ }
+
+ public class Group : BaseModel
+ {
+ public string groupname { get; set; }
+
+ public List users { get; set; } = new List();
+ }
+
+ public class User_Group
+ {
+ public Guid UserId { get; set; }
+ public User user { get; set; }
+
+ public Guid GroupId { get; set; }
+ public Group group { get; set; }
+ }
+
+ }
+}
+
diff --git a/FreeSql/Internal/GlobalFilter.cs b/FreeSql/Internal/GlobalFilter.cs
index a09fb5c7..8089a3d8 100644
--- a/FreeSql/Internal/GlobalFilter.cs
+++ b/FreeSql/Internal/GlobalFilter.cs
@@ -85,5 +85,6 @@ namespace FreeSql.Internal
public void Remove(string name) => _filters.TryRemove(name ?? throw new ArgumentNullException(nameof(name)), out var _);
public List- GetFilters() => _filters.Values.Where(a => a.Condition?.Invoke() != false).OrderBy(a => a.Id).ToList();
+ public List
- GetAllFilters() => _filters.Values.OrderBy(a => a.Id).ToList();
}
}