Nat*_*lai 0 c# entity-framework entity-framework-core
使用Find()和从上下文查询数据时有什么不同Single()。两者都返回被请求的实体。
我在 Microsoft 上发现的一些示例正在使用Single,SingleOrDefault变体来查询实体。一些使用Find方法。
使用其中之一时是否有任何“性能”优势?
尽管它们看起来相同,但在某些基本方面却大不相同
简而言之,Find首先在上下文的本地缓存中搜索。如果未找到匹配项,则它会向数据库发送查询。
文档是你的朋友
查找具有给定主键值的实体。如果上下文中存在具有给定主键值的实体,则它会立即返回,而不会向商店发出请求。否则,将向存储请求具有给定主键值的实体,如果找到该实体,则将其附加到上下文并返回。如果在上下文或存储中未找到实体,则返回 null。
如果没有找到这样的元素,则返回序列的单个特定元素或默认值。
返回序列的第一个元素,如果未找到元素,则返回默认值。
马马虎虎
DbSet 上的 Find 方法使用主键值来尝试查找由上下文跟踪的实体。如果在上下文中未找到实体,则将向数据库发送查询以在那里找到实体。如果在上下文或数据库中找不到实体,则返回 Null。
Find 在两个重要方面不同于使用查询:
- 只有在上下文中找不到具有给定键的实体时,才会进行到数据库的往返。
- Find 将返回处于已添加状态的实体。也就是说,Find 将返回已添加到上下文但尚未保存到数据库的实体。
更新
这是否意味着如果实体已经被跟踪(通过延迟加载),那么在尝试再次查询时 Find 实际上会有更好的性能优势?
是的,它会有更好的性能
| 归档时间: |
|
| 查看次数: |
1016 次 |
| 最近记录: |