我有一个用户表,我在其中使用软删除方法来确保只虚拟删除想要删除的用户。这是因为用户可能仍然有一些费用,即使他们被删除了,我们也需要向他们发送发票。
在实体框架OnModelCreating中,我使用
modelBuilder.Entity<UserDomain>().Property<bool>("isDeleted");
modelBuilder.Entity<UserDomain>().HasQueryFilter(m => EF.Property<bool>(m, "isDeleted") == false);现在,无论我在哪里获取用户,(软)删除的用户都会被忽略。尽管它们仍然存在于数据库中。
但是,现在我想做一个查询,其中包括被扣留的用户,以便如果需要,我可以向他们发送发票。
我想我可以通过使用context.Users.FromSql([query])来绕过这一步。但事实并非如此。它仍然会过滤掉已删除的记录。
如何绕过QueryFilter
发布于 2020-01-23 19:35:53
简单的解决方案是使用具有不同配置的不同DbContext。
DbContext不是数据库的模型,您不需要(实际上您不应该)每个应用或数据库只有一个DbContext。DbContext本质上是DDD术语中的工作单元/有界上下文。
此外,DbContext包含的是实体而不是表。它的工作是将应用程序对象/实体映射到关系表。它不应该是数据库的复制品。
例如,对于最终映射到相同表的不同业务上下文,您可以使用具有不同或更少属性的实体。
在web应用程序中,您需要不同的数据来验证用户身份,并需要不同的数据来显示注册用户列表或显示问候语。例如,没有理由加载用户的所有属性来进行身份验证,也不应该在显示用户列表时加载密码散列。
发布于 2020-01-23 21:37:23
使用.IgnoreQueryFilters()
var list = context.Users.IgnoreQueryFilters();https://stackoverflow.com/questions/59877479
复制相似问题