2

在此 MSDN 链接上提到了以下有关该.Find()方法的内容

如果在上下文中未找到实体,则将向数据库发送查询以在其中查找实体。如果在上下文或数据库中找不到实体,则返回 Null。查找与使用查询在两个重要方面不同:

• 只有在上下文中找不到具有给定键的实体时,才会对数据库进行往返。

• Find 将返回处于已添加状态的实体。也就是说,Find 将返回已添加到上下文但尚未保存到数据库的实体。

但这会导致问题吗?假设一个对象被标记为已添加状态,但在将其保存到数据库之前发生了异常。因此,查找可能会返回具有已添加状态的对象,该状态稍后尚未保存到数据库中。

第二个问题,如果 .Find 在上下文中找到一个对象,并且该对象在找到它之后在数据库中更新,那么上下文上的对象版本会是旧的怎么办?

那么,使用or.Find()代替基于主键进行搜索,我可以获得什么好处?.Where.firstordefault(a=>a.primarykey ==id)

4

1 回答 1

1

好吧,文档指出 Find ...

使用主键值尝试查找上下文跟踪的实体。如果实体不在上下文中,则将执行查询并针对数据源中的数据进行评估,

所以它首先搜索缓存。如果缓存中的内容是旧的(或者数据库中不存在 - 也许永远不会存在),那么这就是你得到的。只有在缓存中找不到实体时才会进行查询。我不会说它返回“错误”的东西,因为它被定义为做什么。如果您需要查找可能被其他用户更改或保证存在于数据库中的数据,您需要坚持查询。

于 2013-08-13T23:25:52.560 回答