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

  • 相关阅读:
    【AHOI2009】 维护序列
    Codeforces Hello 2019 F. Alex and a TV Show[bitset+莫比乌斯反演]
    Codeforces Hello 2019 D. Makoto and a Blackboard[DP+数论+概率期望]
    Codeforces Hello 2019 ABCDF题解
    [BZOJ1042][HAOI2008]硬币购物[容斥原理+背包]
    Codeforces Round #529 (Div. 3)题解
    [BZOJ4311]向量[线段树分治+计算几何+二分/三分]
    [BZOJ1076][SCOI2008]奖励关[状压DP+概率期望]
    [POJ3368][UVA11235] Frequent values[ST表]
    [USACO5.5]矩形周长Picture[扫描线+线段树]
  • 原文地址:https://www.cnblogs.com/neverc/p/5258184.html
Copyright © 2011-2022 走看看