DbContext.Find()和DbContext.SingleOrDefault()实体框架核心之间的区别

时间:2018-10-31 07:46:58

标签: c# entity-framework entity-framework-core

使用Find()Single()从上下文中查询数据时有什么区别。 两者都返回被请求的实体。

我在Microsoft上发现的一些示例正在使用SingleSingleOrDefault变体查询实体。有些使用Find方法。

一个使用另一个时是否有“性能”优势?

1 个答案:

答案 0 :(得分:4)

尽管它们看起来相同,但在某些基本方面却大不相同

简而言之,Find首先在上下文的本地缓存中搜索。如果找不到匹配项,它将向数据库发送查询。

文档是您的朋友

DbSet.Find Method

  

查找具有给定主键值的实体。如果一个实体   给定的主键值存在于上下文中,则它是   立即退货而未向商店提出要求。除此以外,   向商店请求具有给定主要对象的实体   键值和该实体(如果找到)将附加到上下文,并且   回到。如果在上下文或商店中未找到实体,则为null   返回。

Queryable.SingleOrDefault Method

  

返回序列的单个特定元素或默认值   如果找不到这样的元素。

Queryable.FirstOrDefault Method

  

返回序列的第一个元素,如果没有则返回默认值   找到元素。

其他

Querying and Finding Entities

  

DbSet上的Find方法使用主键值尝试查找   由上下文跟踪的实体。如果在   然后将查询发送到数据库以查找实体   那里。如果在上下文中找不到该实体,则返回Null。   在数据库中。

     

查找与在两种主要方式下使用查询不同:

     
      
  • 仅当在上下文中未找到具有给定键的实体时,才进行数据库往返。
  •   
  • 查找将返回处于“已添加”状态的实体。也就是说,“查找”将返回已添加到上下文中但尚未添加的实体   尚未保存到数据库。
  •   

更新

  

这是否意味着如果已对实体进行跟踪(通过   延迟加载),那么Find实际上会有更好的性能   尝试再次查询时有优势吗?

是的,它会具有更好的性能

相关问题