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”,“匿名类型”可以容纳任意数量的值。