gpt4 book ai didi

c# - Entity Framework AutoDetectChangesEnabled = false 和 .Find

转载 作者:行者123 更新时间:2023-11-30 20:42:33 25 4
gpt4 key购买 nike

最近我在 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 是否仍会首先访问缓存,然后访问数据库?

最佳答案

禁用 AutoDetectChangesEnabled 不是问题,您只是在禁用一项功能。 Entity Framework 不会跟踪实体中的更改,您必须在 SaveChanges 之前手动标记它们。

以您的方式激活和停用它是没有意义的,因为您是在 using block 中创建上下文。这意味着在你使用它之后,你正在处理它。因此,您无需再次激活它。

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

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com