.Find(id)
和.Where(x = >x.Id == id)
之间是否应该强迫我使用.Find()
而不是.Where()/.First()
?
我认为.Find()
会更有效率,但它是否更有效率我应该避免.Where()/.First()
?
我问的原因是我在测试中使用了一个通用的FakeDbSet,以便轻松实现假结果,到目前为止,我发现我必须继承该类并提供.Find()
的自定义实现如果我用.Where()/.First()
编写代码,我不需要做额外的工作。
答案 0 :(得分:39)
关键是find
首先在上下文的本地缓存中搜索,然后,如果没有匹配,则向db发送查询。
where
始终向db发送查询。
使用EF 4. *,我曾经认为find
生成的sql过于复杂,在某些情况下会导致性能问题。因此,即使使用EF 5,我也总是使用where
。我应该使用EF 5检查find
生成的sql。
因此,在论文中,find
更好,因为他使用缓存。