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

C# 如何从实体框架更新主键?,c#,sql,entity-framework,C#,Sql,Entity Framework,我有一张桌子 eventid int -- not PK key but with autoincrement jobid -- PK autoincrement disabled userid int -- PK autoincrement disabled 要更新作业ID,我需要执行以下操作: var itemforupdate = context.table.where(n=>n.eventid == someparameter).FirstorDefault() 我正确地

我有一张桌子

eventid int -- not PK key but with autoincrement
jobid -- PK autoincrement disabled
userid  int   -- PK autoincrement disabled
要更新作业ID,我需要执行以下操作:

var itemforupdate = context.table.where(n=>n.eventid == someparameter).FirstorDefault()
我正确地从数据库中获取项目,但分配时:

itemforupdate.jobID = 5;
context.SaveChanges();
context.SaveChanges()之后,我得到一个错误:

属性“jobID”是对象关键信息的一部分,并且 不能修改


如何从EntityFramework更新jobID以解决此问题?

使用EntityFramework更新主键列不是一个好的做法。它会混淆EF,因为它会更改对象的标识,并使数据的内存副本和数据库副本保持同步非常困难。所以这是不允许的

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


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

我不是entity framework的专家,但您不能将对象的键设置为eventid(因为它是一个自动递增列)?我只是使用唯一的eventid从数据库中获取项目,并尝试从EF中更新jobid,但它给出了以下错误: