如何使用Entity Framework更新主键?

17

我有一个表格

eventid int -- not PK key but with autoincrement
jobid -- PK autoincrement disabled
userid  int   -- PK autoincrement disabled

我要更新 jobID,我会执行以下操作:

var itemforupdate = context.table.where(n=>n.eventid == someparameter).FirstorDefault()

我可以正确地从数据库获取项目,但是在赋值时出现问题:

itemforupdate.jobID = 5;
context.SaveChanges();

context.SaveChanges()之后我遇到了以下错误:

属性'jobID'是对象键信息的一部分,因此无法修改

如何使用Entity Framework更新jobID以解决这个问题?


我不是Entity Framework的专家,但你不能将对象的键设置为eventid吗(因为它是自动递增列)? - Zohar Peled
我刚刚使用唯一的事件ID从数据库中获取了项目,并尝试使用EF更新JobID,但出现错误。 - R01
1
请将主键值用 Entity Framework 进行更新的问题在 Stack Overflow 上的复制链接转化为中文。 - Ulric
1个回答

30

使用EntityFramework更新主键列不是一个好的做法。这会使EF混淆,因为它会改变对象的标识符,并且使得在内存中的数据副本和数据库中的数据副本保持同步非常棘手。因此,这是不允许的。

只需不要更新主键。相反,删除一行并插入新的一行。

或者您可以通过存储过程或其他查询直接更新主键。


删除一行并插入新行成功!谢谢。 - A. Morel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接