Entity Framework 仅加载必需的数据
示例
在代码中经常看到的一个问题是加载所有数据。这将大大增加服务器上的负载。
假设我有一个名为“location”的模型,其中有10个字段,但并非所有字段都同时需要。假设我只想要该模型的“LocationName”参数。
不好的例子
var location = dbContext.Location.AsNoTracking() .Where(l => l.Location.ID == location_ID) .SingleOrDefault(); return location.Name;
好的例子
var location = dbContext.Location .Where(l => l.Location.ID == location_ID) .Select(l => l.LocationName); .SingleOrDefault(); return location;
“好示例”中的代码将仅获取“LocationName”,而不会获取其他任何内容。
注意,由于在此示例中没有实体实现,AsNoTracking()因此没有必要。无论如何,没有什么可追踪的。
使用匿名类型获取更多字段
var location = dbContext.Location .Where(l => l.Location.ID == location_ID) .Select(l => new { Name = l.LocationName, Area =l.LocationArea}) .SingleOrDefault(); returnlocation.Name+ " 面积为 " + location.Area;
与前面的示例相同,仅将从数据库中检索字段“LocationName”和“LocationArea”,“匿名类型”可以容纳任意数量的值。