实体框架不跟踪候选键的记录查找

时间:2018-02-08 10:24:49

标签: c# entity-framework

我尝试使用.Find()方法查找记录并将id作为参数传递(它是数据库中的候选键)但我无法找到记录。然后我使用FirstOrDefault()方法获取相同的记录。我得到了记录,然后更新了它并尝试保存,但EF给了我一个错误,就像它没有跟踪该记录。这是否意味着EF不支持用于获取记录的候选键?

1 个答案:

答案 0 :(得分:0)

直接回答你的问题。

  

实体框架不跟踪候选键的记录查找

  

我尝试使用.Find()方法查找记录并将id作为a传递   参数(这是进入数据库的候选键)但我没有   能够找到记录

您需要阅读文档

DbSet<TEntity>.Find Method

  

查找具有给定主键值的实体。如果是实体   给定的主键值存在于上下文中,然后是   在没有向商店提出要求的情况下立即返回。除此以外,   向具有给定主要实体的实体的商店发出请求   键值和此实体(如果找到)附加到上下文和   回。如果在上下文或商店中找不到实体,则为null   归还。

不,find()不能与表主键

之外的任何候选键一起使用

<强>更新

您可以按任意列(最好是索引列)查找记录,您可以毫无问题地更新它们,没有任何限制。您在保存记录方面遇到的任何问题都不是因为您描述的情况,即候选键

请注意,实体框架需要表格映射中的主键(如果表格没有主键),以执行更新或删除操作。

David Browne的评论

  

从技术上讲,EF不要求表具有主键。 EF   要求实体具有一组关键属性。这些通常是地图   到数据库中的主键,但可以映射到你想要的任何键