AutoDetectChangesEnabled

AutoDetectChangesEnabled

最近,我在EF中发现了有关选项AutoDetectChangesEnabled的信息,并且在官方文档中指出,手动处理AutoDetectChangesEnabled可能会导致“细微的错误”。

据我了解,将更改的实体保存到数据库时,事情可能会出错,所以我的问题是:这段代码是否安全(默认情况下, Entity Framework 在调用Find时自动执行“检测更改”):

using (var context = new DbContext())
{
    context.Configuration.AutoDetectChangesEnabled = false;
    var user = context.users.Find(id);
    context.Configuration.AutoDetectChangesEnabled = true;

    return user;
}

因此,正如您所看到的,我不会对我的实体进行任何更改,只是将它们返回,并且如果AutoDetectChangesEnabled设置为false,Find仍将首先命中Cache,然后再命中Database?

最佳答案

禁用AutoDetectChangesEnabled没问题,您只是在禁用功能。 Entity Framework将不会跟踪您实体中的更改,因此您必须在SaveChanges之前手动对其进行标记。

按照您的方式激活和停用它是没有意义的,因为您是在using块中创建上下文的。这意味着在您使用它之后,便要对其进行处置。因此,您无需再次激活它。

另一方面,当从数据库中获取对象时,可以使用AsNoTracking()而不是停用更改检测。这样可以加快查询速度,但是您仍然可以使用其他实体的更改检测功能。就像这样:

dbContext.Users.AsNoTracking().ToList();

关于c# - Entity Framework AutoDetectChangesEnabled = false和.Find,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31297373/

10-11 06:56