Include()上的EF Core HasQueryFilter

时间:2018-10-14 16:57:44

标签: c# .net-core entity-framework-core dbcontext

如果HasQueryFilter方法适用于通过Include()方法联接的实体,我有点困惑。

在这篇(旧的)文章中,他们指出以下内容: https://blogs.msdn.microsoft.com/dotnet/2017/05/12/announcing-ef-core-2-0-preview-1/

  

当查询检索到以下数据时,过滤器会自动应用   特定类型以及直接或通过导航属性,例如   使用 Include()方法。

我在DbContext类中的内容如下:

protected override void OnModelCreating(ModelBuilder builder)
{
    builder.Entity<Post>().HasQueryFilter(x => x.Removed == null);
}

如果我随后执行以下命令,则它还将检索所有Posts为{strong> not null的Removed记录。

// Doesn't apply the query filter because of the Include()
var blog = _dbContext.Blogs.Include(x => x.Posts).Where(x => x.Id == 100);

如果我直接查询Post,那么HasQuerFilter就可以完成工作。

// Here query filter works, because of query directly on Entity
var posts = _dbContext.Posts.ToList();

对于使用Include()连接的实体,该功能不起作用(是否正确?)是否正确?还是我在想什么?

1 个答案:

答案 0 :(得分:0)

这是跟踪问题(这就是为什么多个using语句起作用的原因)。

尽管有多种方法可以做到:

请参见How do I clear tracked entities in entity framework

我们使用了: _dbContext.Entry(blog).State = EntityState.Detached;