实体框架查找与何处

Jim*_*sse 29 .net performance entity-framework dbcontext

有没有之间的差异显著.Find(id),并.Where(x = >x.Id == id)应该强迫我使用.Find().Where()/.First()

我认为.Find()这会更有效但是我应该避免这么高效.Where()/.First()吗?

我问的原因是我在我的测试中使用了一个通用的FakeDbSet,以便轻松实现假结果,到目前为止,我发现我必须继承该类并提供自定义实现,.Find()而如果我编写代码,.Where()/.First()我就不要我不需要做那些额外的工作.

tsc*_*007 44

关键是find通过在上下文的本地缓存中搜索然后,如果没有匹配,则向db发送查询.

where 始终向db发送查询.

使用EF 4.*,我曾经认为生成的sql find太复杂,在某些情况下会导致性能问题.所以我总是使用whereEF 5.我应该检查find用EF 5 生成的sql .

所以在论文中,find因为他使用缓存更好.

  • +1.查找也没有访问表达式树的开销,因此如果它确实访问数据库,它可以更快地访问数据库.总是通过`ExpressionVisitor`的地方. (10认同)
  • 由于缓存,我能否获取不正确的数据?即Db在后台更新? (2认同)
  • 是的你可以。您还可能在检索记录后更新记录时遇到并发访问问题,或者由于隔离级别或...:) (2认同)