如果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()
连接的实体,该功能不起作用(是否正确?)是否正确?还是我在想什么?
答案 0 :(得分:0)
这是跟踪问题(这就是为什么多个using
语句起作用的原因)。
尽管有多种方法可以做到:
请参见How do I clear tracked entities in entity framework
我们使用了:
_dbContext.Entry(blog).State = EntityState.Detached;