我对Entity Framework Core和使用LINQ有一个问题。我想在访问"客户"表时获取其他表的详细信息。我可以使用下面的代码获得它们。总共有大约10个我需要连接的表,在这种情况下,下面的方法是否好或者还有更好的方法呢?"ClientId"是所有表的外键。
实际上,我收到以下警告
[09:34:33 警告] Microsoft.EntityFrameworkCore.Query 编译了一个查询,该查询通过“Include”或通过投影加载多个集合导航的相关集合。但没有配置“QuerySplittingBehavior”。默认情况下,Entity Framework将使用“QuerySplittingBehavior.SingleQuery”,这可能会导致查询性能缓慢。有关更多信息,请参见https://go.microsoft.com/fwlink/?linkid=2134277。要识别触发此警告的查询,请调用“ConfigureWarnings(w => w.Throw(RelationalEventId.MultipleCollectionIncludeWarning))”
代码:
var client = await _context.Clients
.Include(x => x.Address)
.Include(x => x.Properties)
.Include(x => x.ClientDetails)
-------------------
-------------------
-------------------
-------------------
.Where(x => x.Enabled == activeOnly && x.Id == Id).FirstOrDefaultAsync();
AsSplitQuery()
。没有使用此运算符加载这种数据将浪费资源。警告是完全正确的。已回答类似问题。关于性能问题的说明请参见 https://stackoverflow.com/a/67243921/10646316。 - Svyatoslav Danyliv