我有一个异常,说属性'itemId'是对象的关键信息的一部分,无法修改。当我将原始的sql查询改为实体框架时发生了这种情况。下面是原始SQL查询的代码,这些代码的方式工作:属性'itemId'是对象的关键信息的一部分,不能修改
con1.Open();
cmd1.CommandText = "UPDATE [stringInstrumentItem] SET [itemId] = @newId WHERE itemId = @oldId";
cmd1.Connection = con1;
cmd1.Parameters.Add(new SqlParameter("@newId", id));
cmd1.Parameters.Add(new SqlParameter("@oldId", plusId));
a = cmd1.ExecuteNonQuery();
con1.Close();
cmd1.Parameters.Clear();
然后,我改变了代码到实体框架:
using (var context = new MusicStoreDBEntities())
{
var bay = (from s in context.stringInstrumentItems where s.itemId == plusId select s).FirstOrDefault();
bay.itemId = id;
context.SaveChanges();
}
它说,我不能修改的itemId 。如何使用原始sql查询版本修改itemId,而实体框架版本不能?我想知道实体框架版本有什么问题,以及如何解决这个问题?
您不能修改主键。在你的情况下,你需要删除旧的并使用相同的数据创建新的 – Anton
你不能修改EF中的主键的值:https://stackoverflow.com/questions/1367751/update-primary-key-value-使用实体框架 – mm8
@Anton - 是的,因为每当我删除一个项目,它会在itemId中创建一个空白,例如我有ID 42 43 44,然后删除43,它会是这样的42 44.我是什么确实如此,我希望它能像这样42 43。这些id是按顺序排列的。 – RockStar