使用Find()
和Single()
从上下文中查询数据时有什么区别。
两者都返回被请求的实体。
我在Microsoft上发现的一些示例正在使用Single
和SingleOrDefault
变体查询实体。有些使用Find
方法。
一个使用另一个时是否有“性能”优势?
答案 0 :(得分:4)
尽管它们看起来相同,但在某些基本方面却大不相同
简而言之,Find
首先在上下文的本地缓存中搜索。如果找不到匹配项,它将向数据库发送查询。
文档是您的朋友
查找具有给定主键值的实体。如果一个实体 给定的主键值存在于上下文中,则它是 立即退货而未向商店提出要求。除此以外, 向商店请求具有给定主要对象的实体 键值和该实体(如果找到)将附加到上下文,并且 回到。如果在上下文或商店中未找到实体,则为null 返回。
Queryable.SingleOrDefault Method
返回序列的单个特定元素或默认值 如果找不到这样的元素。
Queryable.FirstOrDefault Method
返回序列的第一个元素,如果没有则返回默认值 找到元素。
其他
DbSet上的Find方法使用主键值尝试查找 由上下文跟踪的实体。如果在 然后将查询发送到数据库以查找实体 那里。如果在上下文中找不到该实体,则返回Null。 在数据库中。
查找与在两种主要方式下使用查询不同:
- 仅当在上下文中未找到具有给定键的实体时,才进行数据库往返。
- 查找将返回处于“已添加”状态的实体。也就是说,“查找”将返回已添加到上下文中但尚未添加的实体 尚未保存到数据库。
更新
这是否意味着如果已对实体进行跟踪(通过 延迟加载),那么Find实际上会有更好的性能 尝试再次查询时有优势吗?
是的,它会具有更好的性能