实体框架数据库默认情况下,首先只获取活动行

时间:2018-01-10 15:38:20

标签: c# asp.net-mvc entity-framework

我们最近在Employee表中添加了一个新的布尔列ACTIVE。因此,当用户想要删除表中的员工时,该记录将被软删除" (ACTIVE字段将设置为false,而不是完全删除的行。)

但是,该表格在应用程序的各个位置使用,我们不想在每次查询表格时添加。(员工=> employee.ACTIVE)。有没有办法我们可以默认获取这些ACTIVE行,也可以将Where子句放在某个根目录? (我们不关心实时应用中的非活动员工,但我们需要数据库中的这些记录。)

我们使用Database First EF,因此我们无法在Code First(拦截器)中使用相同的Soft Delete策略。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

使用Dynamic Filters(这是一个非常好的基本上使用DbInterceptors的库)。

我们做同样的事情。以下是我们如何设置它以在多租户环境中强制执行租户的示例代码:

        modelBuilder.Filter("ChmPeople_ChurchId",
            (IChurchDataPrivileged entity, int churchId) => entity.ChurchId == churchId || entity.ChurchId == 0,
            () => AuthenticatedUser?.ChurchId ?? 0);

ChurchId =租户ID,因此对数据库的所有查询都会被当前登录的租户ID自动过滤。