实体框架查找与何处

时间:2013-06-06 15:31:08

标签: .net performance entity-framework dbcontext

.Find(id).Where(x = >x.Id == id)之间是否应该强迫我使用.Find()而不是.Where()/.First()

我认为.Find()会更有效率,但它是否更有效率我应该避免.Where()/.First()

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

1 个答案:

答案 0 :(得分:39)

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

where始终向db发送查询。

使用EF 4. *,我曾经认为find生成的sql过于复杂,在某些情况下会导致性能问题。因此,即使使用EF 5,我也总是使用where。我应该使用EF 5检查find生成的sql。

因此,在论文中,find更好,因为他使用缓存。