【发布时间】:2017-04-21 23:05:58
【问题描述】:
我在我的 ASP.NET MVC 应用程序中使用实体框架,并且在通过 LINQ 从 SQL Server 加载数据时遇到问题。我的查询在 4 秒内返回结果,但我需要更短的时间,仍在寻找更好的解决方案。
这是我的 linq 查询:
var user =
context.CreateObjectSet<DAL.ProductMaster>()
.AsNoTracking()
.Include("Product1").AsNoTracking()
.Include("Product2").AsNoTracking()
.Include("Product3").AsNoTracking()
.Include("Product4").AsNoTracking()
.Include("Product5").AsNoTracking()
.Where(x => x.Id == request.Id)
).FirstOrDefault();
【问题讨论】:
-
你试过加载更少的实体吗?
-
您确定需要 ALL 的那些其他表和数据,因为这会产生相当多的 JOIN 操作,这可能会很昂贵。此外,您可以用
FirstOrDefault()替换您的Where()子句以稍微清理一下,您可能不需要为每个单独的Include() 调用AsNoTracking()。 -
尝试编写您希望手动对数据库执行的 sql。如果运行良好,请尝试优化您的 linq
-
考虑使用
.Select()运算符来准确地获取您想要的内容,而不是看起来像数据库很大一部分的大杂烩。 -
在多个查询中获取数据 + 删除
organizationsList.Count()!= 0(并且,与性能无关:删除除一个 AsNoTracking 调用之外的所有调用)。
标签: c# entity-framework linq