39

和 之间是否有显着差异.Find(id).Where(x = >x.Id == id)应该迫使我使用.Find()over .Where()/.First()

我想这.Find()会更有效率,但是我应该避免这样的效率高得多.Where()/.First()吗?

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

4

1 回答 1

53

关键是Find()首先在上下文的本地缓存中搜索,然后如果不匹配,则向数据库发送查询。

调用Where()总是向数据库发送查询。

对于 EF 4,我曾经认为由 生成的 SQLFind()过于复杂,并且在某些情况下会导致性能问题。所以我总是使用Where()EF 5。我应该检查Find()使用 EF 5 生成的 SQL。

所以在纸面上,Find()更好,因为它使用缓存。

于 2013-06-06T15:38:11.693 回答