我有一个异常,说明属性'itemId'是对象的关键信息的一部分,无法修改。当我将原始sql查询更改为实体框架时,就会发生这种情况。下面是原始sql查询的代码,它的工作原理如下:
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,而实体框架版本却没有?我想知道实体框架版本有什么问题以及如何解决这个问题?
答案 0 :(得分:0)
你不能在EF中这样做。您想要更新密钥以便保持顺序的原因是什么?这不应该是任何原因,但如果由于某种原因确实需要序列ID,则可以将其放在另一列中。
主键应该是任意的。它的唯一要求是它应该是唯一的。我以为你可能采取了错误的做法。