hyp*_*erN 5 c# entity-framework
最近我在 EF 中发现了 AutoDetectChangesEnabled 选项,并且在官方文档中指出手动处理 AutoDetectChangesEnabled 可能会导致“微妙的错误”。
据我所知,将更改的实体保存到数据库时可能会出错,所以我的问题是:这段代码是否安全(默认情况下,实体框架在调用 Find 时自动执行检测更改):
using (var context = new DbContext())
{
context.Configuration.AutoDetectChangesEnabled = false;
var user = context.users.Find(id);
context.Configuration.AutoDetectChangesEnabled = true;
return user;
}
Run Code Online (Sandbox Code Playgroud)
所以,正如您所看到的,我没有对我的实体进行任何更改,只是返回它们,如果 AutoDetectChangesEnabled 设置为 false,Find 仍会先点击 Cache 然后再点击数据库?
禁用AutoDetectChangesEnabled
不是问题,您只是禁用了一个功能。实体框架不会跟踪实体中的更改,您必须在SaveChanges
.
以您的方式激活和停用它是没有意义的,因为您正在 using 块中创建上下文。这意味着在您使用它之后,您正在处置它。因此,您无需再次激活它。
另一方面,您可以AsNoTracking()
在从数据库获取对象时使用,而不是停用更改检测。这将加快您的查询速度,但您仍然可以使用其他实体的更改检测功能。它是这样的:
dbContext.Users.AsNoTracking().ToList();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7579 次 |
最近记录: |