最好使用Find()或Single()从数据库中选择一个项目?

时间:2017-05-09 11:25:35

标签: c# asp.net asp.net-mvc entity-framework linq

我正在创建ASP.NET MVC应用程序,对于需要单个项目的EditDetails等操作,最好使用myDbContext.MyDbSet.Single(i => i.Id == id)myDbContext.MyDbSet.Find(id) ?后者更短,在我看来,更清晰,不需要Linq方法,但我一直在阅读ASP.NET MVC的来源似乎更喜欢前者。

我找不到查看实现的方法,但如果我不得不猜测,我会说Single()可能会在某处使用Find(),这表示更多的方法调用效率/性能稍差。我的想法是正确的吗?

1 个答案:

答案 0 :(得分:4)

主要区别在于Find()首先搜索DbContext的第一级缓存。如果没有命中,它将查询数据库。 Single()将始终查询数据库。除此之外,Find()在未找到实体时返回null。 Single()将抛出异常。因此,Find()的等效值为SingleOrDefault()