本节目录

  • 介绍
  • 定义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

[Architect] Abp 框架原理解析(3) DynamicFilters的更多相关文章

  1. [Architect] Abp 框架原理解析(5) UnitOfWork

    本节目录 介绍 分析Abp源码 实现UOW 介绍 UOW(全称UnitOfWork)是指工作单元. 在Abp中,工作单元对于仓储和应用服务方法默认开启.并在一次请求中,共享同一个工作单元. 同时在Ab ...

  2. [Architect] Abp 框架原理解析(4) Validation

    本节目录 介绍 DataAnnotations ICustomValidate IShouldNormalize 实现Abp Validation 介绍 Abp中在Application层集成了val ...

  3. [Architect] Abp 框架原理解析(2) EventBus

    本节目录 原理介绍 Abp源码分析 代码实现 原理介绍 事件总线大致原理: (1)       在事件总线内部维护着一个事件与事件处理程序相映射的字典. (2)       利用反射,事件总线会将实现 ...

  4. [Architect] Abp 框架原理解析(1) Module

    本节目录 Abp介绍 Abp源码分析 代码实现 Abp介绍 学习了一段时间的Abp,领略了一下前辈的架构.总结还是SOLID,降低耦合性. 虽然从架构上说甚至不依赖于DI框架,但实际上在基础框架中还是 ...

  5. [Architect] ABP(现代ASP.NET样板开发框架) 翻译

    所有翻译文档,将上传word文档至GitHub 本节目录: 简介 代码示例 支持的功能 GitHub 简介 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目) ...

  6. ABP架构解析

    ABP总体介绍 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应 ...

  7. [置顶] 滴滴插件化VirtualAPK框架原理解析(二)之Service 管理

    在前一篇博客滴滴插件化框架VirtualAPK原理解析(一)之插件Activity管理 中VirtualAPK是如何对Activity进行管理的,本篇博客,我们继续来学习这个框架,这次我们学习的是如何 ...

  8. ADB运行框架原理解析【转】

    本文转载自:http://blog.csdn.net/wlwl0071986/article/details/50935496 一.adb守护进程的初始化 源码路径:~/system/core/adb ...

  9. Java并发Fork-Join框架原理解析

    1.什么是Foirk/Join框架 Fork/Join框架是Java7提供用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架. 2.什么是并行流与顺 ...

随机推荐

  1. Andriod Studio 开发环境安装和配置

    Android Studio安装配置详细步骤(图文):http://www.2cto.com/kf/201604/500642.html第一次使用Android Studio时你应该知道的一切配置 : ...

  2. memcpy memmove区别和实现

    memcpy与memmove的目的都是将N个字节的源内存地址的内容拷贝到目标内存地址中. 但当源内存和目标内存存在重叠时,memcpy会出现错误,而memmove能正确地实施拷贝,但这也增加了一点点开 ...

  3. 面包板入门电子制作(class1)视频 全套30集高清

    面包板入门电子制作(class1)套件(30集高清) 本套件以电子制作中最基础的元器件在面包板上搭建电路,用启发性的视频教学方式,使学习者熟悉电子电路基础.发挥想像力.在创新设计和制作中学会独立设计和 ...

  4. android自定义seekBar

    Android原生控件只有横向进度条一种,而且没法变换样式,比如原生rom的样子 很丑是吧,当伟大的产品设计要求更换前背景,甚至纵向,甚至圆弧状的,咋办,比如 ok,我们开始吧: 一)变换前背景 先来 ...

  5. asp Gridview绑定形式获取行号

    Gridview中使用<%# Container.DataItemIndex %>取得当前行的序号 而在Repeater控件中使用Container.ItemIndex取得当前行的序号 & ...

  6. 每日英语:A Different Color: China's Chameleonic Politics

    China has tried your form of government and found it wanting. That was the message delivered by Chin ...

  7. brew 出现 git 错误的问题分析

    现象 brew update的时候出现 gitcrash   分析 在brew update 的时候看见有 git gc 的字样,提示有在gc 的动作.到/usr/local/ 目录,直接运行 git ...

  8. iOS网络编程模型

    iOS网络编程层次结构也分为三层: Cocoa层:NSURL,Bonjour,Game Kit,WebKit Core Foundation层:基于 C 的 CFNetwork 和 CFNetServ ...

  9. [转]HTTP请求模型和头信息

    原文链接:http://www.java3z.com/cwbwebhome/article/article2/2406.html 目录 一.连接至Web服务器 二.发送HTTP请求 三.服务端接受请求 ...

  10. MediaPlayer 播放assets 文件夹下面的视频报错

    Android MediaPlayer 播放assets 文件夹下面的视频报错 报下面的错: java.io.FileNotFoundException: This file can not be o ...