2 回答

TA贡献1735条经验 获得超5个赞
您可能需要为查询中的“OwnedItems”导航属性启用即时加载: https ://docs.microsoft.com/en-us/ef/core/querying/related-data#eager-loading
如果我应该举个例子,请发布您的完整 linq 查询。
更新 1
似乎子查询在 EF Core 中有 N+1 个问题,它可能会在版本 3 中修复。
参考:https ://github.com/aspnet/EntityFrameworkCore/issues/10001
更新 2
如果您不需要完全实现“项目”,您应该能够做这样的事情,您可以创建一个匿名对象,而不是应该将 EF “欺骗”成您想要的:
from item in Items
select new
{
Owned = OwnedItems.Any(own => own.UserId == userId && own.ItemId == item.Id),
Item = new { Id = item.Id, Name = item.Name }
}
参考:https ://github.com/aspnet/EntityFrameworkCore/issues/11186

TA贡献1891条经验 获得超3个赞
您需要告诉 EF 加载相关数据,在本例中为OwnedItems表。
解决此问题的一种方法是包含相关表。如果有链接表的外键,则可以像这样轻松完成:
var dataWithRelatedData = db_context.Items.Include(x => x.OwnedItems).Select ...
避免大量往返数据库的另一种方法是将两个数据集加载到单独的查询中,然后将它们合并到内存中。因此,您将首先对Items进行查询,然后将数据返回到OwnedItems的另一个查询,最后将它们合并到一个对象列表中。这只会对数据库进行 2 次调用,从而提高性能。
- 2 回答
- 0 关注
- 134 浏览
添加回答
举报