使用 AsNoTracking

不好的例子:

var location =  dbContext.Location
                     .Where(l => l.Location.ID == location_ID)
                     .SingleOrDefault();

return location;

由于上述代码只是在不修改或添加实体的情况下返回实体,因此我们可以避免跟踪成本。

好例子:

var location =  dbContext.Location.AsNoTracking()
                     .Where(l => l.Location.ID == location_ID)
                     .SingleOrDefault();

return location;

当我们使用函数 AsNoTracking() 时,我们明确地告诉实体框架实体不被上下文跟踪。在从数据存储中检索大量数据时,这尤其有用。但是,如果要对未跟踪的实体进行更改,则必须记住在调用 SaveChanges 之前附加它们。