我们最近在Employee表中添加了一个新的布尔列ACTIVE。因此,当用户想要删除表中的员工时,该记录将被软删除" (ACTIVE字段将设置为false,而不是完全删除的行。)
但是,该表格在应用程序的各个位置使用,我们不想在每次查询表格时添加。(员工=> employee.ACTIVE)。有没有办法我们可以默认获取这些ACTIVE行,也可以将Where子句放在某个根目录? (我们不关心实时应用中的非活动员工,但我们需要数据库中的这些记录。)
我们使用Database First EF,因此我们无法在Code First(拦截器)中使用相同的Soft Delete策略。
感谢您的帮助!
答案 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自动过滤。