gpt4 book ai didi

c# - Include() 上的 EF Core HasQueryFilter

转载 作者:行者123 更新时间:2023-12-03 21:18:51 28 4
gpt4 key购买 nike

如果 HasQueryFilter 我有点困惑方法应该适用于由 Include() 加入的实体。方法。

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

Filters are applied automatically when queries retrieve data of specific types directly as well as through navigation properties, e.g. using the Include() method.



我的 DbContext 里有什么类如下:
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<Post>().HasQueryFilter(x => x.Removed == null);
}

如果我然后执行以下操作,那么它还会检索所有 Posts记录在哪里 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() 连接的实体不起作用(还没有?)是否正确? ?还是我错过了什么?

最佳答案

这是跟踪的问题(这就是多个 using 语句起作用的原因)。
有不同的方法可以做到这一点:
How do I clear tracked entities in entity framework
我们用了:_dbContext.Entry(blog).State = EntityState.Detached;

关于c# - Include() 上的 EF Core HasQueryFilter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52805003/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com