实体框架对象缓存行为

时间:2015-10-12 13:37:25

标签: c# entity-framework caching

我确信在实体框架上发出FirstOrDefault()将对数据库发出查询并点击缓存我可以使用.Find()

但是帮助同事调试EF4.2中的问题(查询数据没有反映db数据,查询不在sql profiler中)让我进入了solution。因此,请使用“.AsNoTracking()”,之后我发现其他帖子here表明:

  

“以下有时从EF缓存中提取”:   .FirstOrDefault();

另一篇同样问题的帖子:here

如果你去msdn:

  

默认情况下,在查询结果中返回实体时,就在EF实现它之前,ObjectContext将检查具有相同键的实体是否已加载到其ObjectStateManager中。如果具有相同键的实体已存在,则EF将其包含在查询结果中。尽管EF仍将针对数据库发出查询,但此行为可以绕过实现多次实体化的大部分成本。   .........

     

与常规查询不同,DbSet中的Find方法(包括的API)   EF 4.1中的第一次将在偶数之前在内存中执行搜索   对数据库发出查询。

其他SO帖子:herehere似乎支持msdn?

那么EF对象缓存如何表现?

  • 除了.FirstOrDefault()时总是点击数据库,但有时只能使用(黑盒子),所以最好还是使用.AsNoTracking().FirstOrDefault()才能确定?
  • 我应该期待与其他方法类似的问题:First()Single()SingleOrDefault()

0 个答案:

没有答案