我正在创建ASP.NET MVC应用程序,对于需要单个项目的Edit
或Details
等操作,最好使用myDbContext.MyDbSet.Single(i => i.Id == id)
或myDbContext.MyDbSet.Find(id)
?后者更短,在我看来,更清晰,不需要Linq方法,但我一直在阅读ASP.NET MVC的来源似乎更喜欢前者。
我找不到查看实现的方法,但如果我不得不猜测,我会说Single()
可能会在某处使用Find()
,这表示更多的方法调用效率/性能稍差。我的想法是正确的吗?
答案 0 :(得分:4)
主要区别在于Find()
首先搜索DbContext
的第一级缓存。如果没有命中,它将查询数据库。 Single()
将始终查询数据库。除此之外,Find()
在未找到实体时返回null。 Single()
将抛出异常。因此,Find()
的等效值为SingleOrDefault()
。