zoukankan      html  css  js  c++  java
  • [Architect] Abp 框架原理解析(3) DynamicFilters

    本节目录

    • 介绍
    • 定义Filter
    • 设置Filter

    这是Abp中多租户、软删除、激活禁用等如此方便的原因

    Install-Package EntityFramework.DynamicFilters

    定义数据

        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; }
        }
    

    初始化数据

            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();
            }
    

    查询数据

            private static void Query()
            {
                using (var db = new DemoDb())
                {
                    Console.WriteLine(db.Blogs.Count());
                }
            }
    

    定义Filter

            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

    修改参数值

            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

  • 相关阅读:
    数据类型(列类型-小数型)
    Python全栈开发之2、数据类型-数值、字符串、列表、字典、元组和文件处理
    Python全栈开发之3、深浅拷贝、变量和函数、递归、函数式编程、内置函数
    Python全栈开发之1、python基础初识介绍以及安装
    数据类型(列类型)
    中文数据问题
    SQL--数据--基本操作
    SQL--数据表--基本操作
    SQL--数据库--基本操作
    Mysql数据库
  • 原文地址:https://www.cnblogs.com/neverc/p/5258184.html
Copyright © 2011-2022 走看看