首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架ByPass QueryFilter / SoftDelete

实体框架ByPass QueryFilter / SoftDelete
EN

Stack Overflow用户
提问于 2020-01-23 19:26:08
回答 2查看 132关注 0票数 1

我有一个用户表,我在其中使用软删除方法来确保只虚拟删除想要删除的用户。这是因为用户可能仍然有一些费用,即使他们被删除了,我们也需要向他们发送发票。

在实体框架OnModelCreating中,我使用

代码语言:javascript
复制
modelBuilder.Entity<UserDomain>().Property<bool>("isDeleted");
modelBuilder.Entity<UserDomain>().HasQueryFilter(m => EF.Property<bool>(m, "isDeleted") == false);

现在,无论我在哪里获取用户,(软)删除的用户都会被忽略。尽管它们仍然存在于数据库中。

但是,现在我想做一个查询,其中包括被扣留的用户,以便如果需要,我可以向他们发送发票。

我想我可以通过使用context.Users.FromSql([query])来绕过这一步。但事实并非如此。它仍然会过滤掉已删除的记录。

如何绕过QueryFilter

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-23 19:35:53

简单的解决方案是使用具有不同配置的不同DbContext。

DbContext不是数据库的模型,您不需要(实际上您不应该)每个应用或数据库只有一个DbContext。DbContext本质上是DDD术语中的工作单元/有界上下文。

此外,DbContext包含的是实体而不是表。它的工作是将应用程序对象/实体映射到关系表。它不应该是数据库的复制品。

例如,对于最终映射到相同表的不同业务上下文,您可以使用具有不同或更少属性的实体。

在web应用程序中,您需要不同的数据来验证用户身份,并需要不同的数据来显示注册用户列表或显示问候语。例如,没有理由加载用户的所有属性来进行身份验证,也不应该在显示用户列表时加载密码散列。

票数 0
EN

Stack Overflow用户

发布于 2020-01-23 21:37:23

使用.IgnoreQueryFilters()

代码语言:javascript
复制
var list = context.Users.IgnoreQueryFilters();
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59877479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档