[Architect] Abp 框架原理解析(3) DynamicFilters
本节目录
- 介绍
- 定义Filter
- 设置Filter
这是Abp中多租户、软删除、激活\禁用等如此方便的原因
Install-Package EntityFramework.DynamicFilters
定义数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | class DemoDb : DbContext { public DemoDb() : base ( "Default" ) { } public IDbSet<Blog> Blogs { get ; set ; } } interface ISoftDelete { bool IsDeleted { get ; set ; } } class Blog : ISoftDelete { public int Id { get ; set ; } public string Name { get ; set ; } public bool IsDeleted { get ; set ; } } |
初始化数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | static void Main( string [] args) { using ( var db = new DemoDb()) { for ( int i = 0; i < 5; i++) { db.Blogs.Add( new Blog { Name = i.ToString() }); } for ( int i = 0; i < 5; i++) { db.Blogs.Add( new Blog { Name = i.ToString(), IsDeleted = true }); } db.SaveChanges(); } Console.WriteLine( "Done" ); Console.ReadLine(); } |
查询数据
1 2 3 4 5 6 7 | private static void Query() { using ( var db = new DemoDb()) { Console.WriteLine(db.Blogs.Count()); } } |
定义Filter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | protected override void OnModelCreating(DbModelBuilder modelBuilder) { //以下几种效果均一样 modelBuilder.Filter( "IsDeleted" , (ISoftDelete entity) => entity.IsDeleted, false ); //modelBuilder.Filter("IsDeleted", (ISoftDelete entity) => entity.IsDeleted == false); //modelBuilder.Filter("IsDeleted", (Blog entity) => entity.IsDeleted, () => //{ // //todo other // return false; //}); //多参数情况 modelBuilder.Filter( "BlogFilter" , (Blog b, int id, bool isDeleted) => (b.Id == id) && (b.IsDeleted == isDeleted), () => 1, () => false ); } |
设置Filter
修改参数值
1 2 3 4 5 6 7 8 9 | private static void Query() { using ( var db = new DemoDb()) { db.SetFilterScopedParameterValue( "IsDeleted" , true ); db.SetFilterScopedParameterValue( "BlogFilter" , "id" , 2); Console.WriteLine(db.Blogs.Count()); } } |
启用/禁用过滤
禁用代码:
context.DisableFilter("IsDeleted");
context.DisableAllFilter();
modelBuilder.DisableFilterGlobally("IsDeleted");
启用代码:
context.EnableFilter();
context.EnableAllFilter();
参考:
https://github.com/jcachat/EntityFramework.DynamicFilters
本文地址:http://www.cnblogs.com/neverc/p/5258184.html
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 如果觉得还有帮助的话,可以点一下右下角的【推荐】,希望能够持续的为大家带来好的技术文章!想跟我一起进步么?那就【关注】我吧。
分类:
[15]Architect
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义