小编典典

如何从实体框架更新主键?

sql

我有桌子

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”是对象键信息的一部分,无法修改

如何从实体框架更新jobID以解决此问题?


阅读 201

收藏
2021-03-17

共1个答案

小编典典

使用EntityFramework更新主键列不是一个好习惯。它使EF混乱,因为它更改了对象的身份,并使保持数据的内存中副本和数据库内副本同步非常困难。所以这是不允许的。

只是不更新​​主键。而是删除一行并插入新的一行。

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

2021-03-17