我尝试使用.Find()方法查找记录并将id作为参数传递(它是数据库中的候选键)但我无法找到记录。然后我使用FirstOrDefault()方法获取相同的记录。我得到了记录,然后更新了它并尝试保存,但EF给了我一个错误,就像它没有跟踪该记录。这是否意味着EF不支持用于获取记录的候选键?
答案 0 :(得分:0)
直接回答你的问题。
实体框架不跟踪候选键的记录查找
和
我尝试使用.Find()方法查找记录并将id作为a传递 参数(这是进入数据库的候选键)但我没有 能够找到记录
您需要阅读文档
查找具有给定主键值的实体。如果是实体 给定的主键值存在于上下文中,然后是 在没有向商店提出要求的情况下立即返回。除此以外, 向具有给定主要实体的实体的商店发出请求 键值和此实体(如果找到)附加到上下文和 回。如果在上下文或商店中找不到实体,则为null 归还。
不,find()
不能与表主键
<强>更新强>
您可以按任意列(最好是索引列)查找记录,您可以毫无问题地更新它们,没有任何限制。您在保存记录方面遇到的任何问题都不是因为您描述的情况,即候选键
请注意,实体框架需要表格映射中的主键(如果表格没有主键),以执行更新或删除操作。
David Browne的评论
从技术上讲,EF不要求表具有主键。 EF 要求实体具有一组关键属性。这些通常是地图 到数据库中的主键,但可以映射到你想要的任何键