Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架AutoDetectChangesEnabled=false和.Find_C#_Entity Framework - Fatal编程技术网

C# 实体框架AutoDetectChangesEnabled=false和.Find

C# 实体框架AutoDetectChangesEnabled=false和.Find,c#,entity-framework,C#,Entity Framework,最近,我在EF中发现了关于选项AutoDetectChangesEnabled的信息,在官方文档中指出,手动处理AutoDetectChangesEnabled可能会导致“微妙的错误” 据我所知,将更改的实体保存到数据库时可能会出错,所以我的问题是:这段代码是否安全(默认情况下,实体框架在调用Find时自动执行检测更改): 所以,正如您所看到的,我没有对我的实体进行任何更改,只是返回它们,如果AutoDetectChangesEnabled设置为false,则仍会首先命中缓存,然后命中数据库?禁

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

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


所以,正如您所看到的,我没有对我的实体进行任何更改,只是返回它们,如果AutoDetectChangesEnabled设置为false,则仍会首先命中缓存,然后命中数据库?

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

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

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

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

本质上,
AsNoTracking()
告诉实体框架,“我不会更改EF缓存中的任何实体,所以不要添加跟踪信息。”如果您不打算修改检索的实体,它将消除一些额外的内存和处理。
dbContext.Users.AsNoTracking().ToList();