使用Find()
和Single()
从上下文查询数据的不同之处在哪里?两者都返回所请求的实体。
我在微软上找到的一些示例使用Single
,SingleOrDefault
变体来查询实体。有些使用Find
方法。
在使用其中一种方法时是否有任何“性能”优势?
使用Find()
和Single()
从上下文查询数据的不同之处在哪里?两者都返回所请求的实体。
我在微软上找到的一些示例使用Single
,SingleOrDefault
变体来查询实体。有些使用Find
方法。
在使用其中一种方法时是否有任何“性能”优势?
Find
从上下文的本地缓存中开始搜索。如果没有找到匹配项,则向数据库发送查询。
文档是你的朋友
DbSet.Find 方法
Queryable.SingleOrDefault 方法使用给定的主键值查找实体。如果在上下文中存在具有给定主键值的实体,则立即返回该实体,而无需向存储发出请求。否则,将向存储请求具有给定主键值的实体,并将找到的此实体附加到上下文并返回。如果在上下文或存储中未找到实体,则返回 null。
返回序列中的单个特定元素,如果找不到这样的元素,则返回默认值。
返回序列中的第一个元素,如果没有找到元素,则返回默认值。
更多信息
DbSet的Find方法使用主键值来查找上下文中跟踪的实体。如果在上下文中未找到该实体,则会向数据库发送查询以查找该实体。如果在上下文或数据库中未找到该实体,则返回Null。 Find与使用查询的方式有两个重要区别: 1.仅当未在上下文中找到具有给定键的实体时,才会进行往返于数据库的操作。 2.Find将返回处于Added状态的实体。也就是说,Find将返回已添加到上下文但尚未保存到数据库中的实体。 更新 这是否意味着,如果实体已通过惰性加载被跟踪,那么在尝试再次查询时,Find实际上会具有更好的性能优势?