mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 18:52:50 +08:00
- 修复 GlobalFilter.ApplyIf + Repository.DataFilter.DisableAll 可能不生效的问题;
This commit is contained in:
parent
550af76979
commit
93ea581281
@ -446,6 +446,7 @@ namespace base_entity
|
|||||||
sqss2 = fsql.InsertDict(diclist).AsTable("table1").NoneParameter(false).ToSql();
|
sqss2 = fsql.InsertDict(diclist).AsTable("table1").NoneParameter(false).ToSql();
|
||||||
|
|
||||||
dic["xxx"] = null;
|
dic["xxx"] = null;
|
||||||
|
dic["yyy"] = 111;
|
||||||
var sqlupd1 = fsql.UpdateDict(dic).AsTable("table1").WherePrimary("id").ToSql();
|
var sqlupd1 = fsql.UpdateDict(dic).AsTable("table1").WherePrimary("id").ToSql();
|
||||||
var sqlupd2 = fsql.UpdateDict(diclist).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();
|
var sqlupd11 = fsql.UpdateDict(dic).AsTable("table1").WherePrimary("id").NoneParameter(false).ToSql();
|
||||||
|
@ -733,15 +733,6 @@
|
|||||||
<param name="modelBuilder"></param>
|
<param name="modelBuilder"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:FreeSqlDbContextExtensions.ApplyConfigurationsFromAssembly(FreeSql.ICodeFirst,System.Reflection.Assembly,System.Func{System.Type,System.Boolean})">
|
|
||||||
<summary>
|
|
||||||
根据Assembly扫描所有继承IEntityTypeConfiguration<T>的配置类
|
|
||||||
</summary>
|
|
||||||
<param name="codeFirst"></param>
|
|
||||||
<param name="assembly"></param>
|
|
||||||
<param name="predicate"></param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSqlDbContextExtensions.CreateDbContext(IFreeSql)">
|
<member name="M:FreeSqlDbContextExtensions.CreateDbContext(IFreeSql)">
|
||||||
<summary>
|
<summary>
|
||||||
创建普通数据上下文档对象
|
创建普通数据上下文档对象
|
||||||
@ -800,14 +791,5 @@
|
|||||||
<param name="that"></param>
|
<param name="that"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:Microsoft.Extensions.DependencyInjection.FreeSqlRepositoryDependencyInjection.AddFreeRepository(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{FreeSql.FluentDataFilter},System.Reflection.Assembly[])">
|
|
||||||
<summary>
|
|
||||||
批量注入 Repository,可以参考代码自行调整
|
|
||||||
</summary>
|
|
||||||
<param name="services"></param>
|
|
||||||
<param name="globalDataFilter"></param>
|
|
||||||
<param name="assemblies"></param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
</members>
|
</members>
|
||||||
</doc>
|
</doc>
|
||||||
|
@ -30,7 +30,7 @@ namespace FreeSql
|
|||||||
DataFilter.Apply("", filter);
|
DataFilter.Apply("", filter);
|
||||||
AsTable(asTable);
|
AsTable(asTable);
|
||||||
|
|
||||||
fsql.GlobalFilter.GetFilters().ForEach(gf =>
|
fsql.GlobalFilter.GetAllFilters().ForEach(gf =>
|
||||||
{
|
{
|
||||||
(DataFilter as DataFilter<TEntity>)._filtersByOrm.TryAdd(gf.Name, new DataFilter<TEntity>.FilterItemByOrm
|
(DataFilter as DataFilter<TEntity>)._filtersByOrm.TryAdd(gf.Name, new DataFilter<TEntity>.FilterItemByOrm
|
||||||
{
|
{
|
||||||
|
153
FreeSql.Tests/FreeSql.Tests.DbContext/RepositoryTests02.cs
Normal file
153
FreeSql.Tests/FreeSql.Tests.DbContext/RepositoryTests02.cs
Normal file
@ -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<User>("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<User> resp = fsql.GetRepository<User>();
|
||||||
|
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<User>().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<int> _asyncLocal = new AsyncLocal<int>();
|
||||||
|
|
||||||
|
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<Group> groups { get; set; } = new List<Group>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Cate : BaseModel
|
||||||
|
{
|
||||||
|
public string catename { get; set; }
|
||||||
|
|
||||||
|
public List<User> users { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Group : BaseModel
|
||||||
|
{
|
||||||
|
public string groupname { get; set; }
|
||||||
|
|
||||||
|
public List<User> users { get; set; } = new List<User>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public class User_Group
|
||||||
|
{
|
||||||
|
public Guid UserId { get; set; }
|
||||||
|
public User user { get; set; }
|
||||||
|
|
||||||
|
public Guid GroupId { get; set; }
|
||||||
|
public Group group { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -85,5 +85,6 @@ namespace FreeSql.Internal
|
|||||||
public void Remove(string name) => _filters.TryRemove(name ?? throw new ArgumentNullException(nameof(name)), out var _);
|
public void Remove(string name) => _filters.TryRemove(name ?? throw new ArgumentNullException(nameof(name)), out var _);
|
||||||
|
|
||||||
public List<Item> GetFilters() => _filters.Values.Where(a => a.Condition?.Invoke() != false).OrderBy(a => a.Id).ToList();
|
public List<Item> GetFilters() => _filters.Values.Where(a => a.Condition?.Invoke() != false).OrderBy(a => a.Id).ToList();
|
||||||
|
public List<Item> GetAllFilters() => _filters.Values.OrderBy(a => a.Id).ToList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user