属性'itemId'是对象的关键信息的一部分,无法修改

时间:2017-07-14 14:31:27

标签: c# sql database entity-framework linq

我有一个异常,说明属性'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,而实体框架版本却没有?我想知道实体框架版本有什么问题以及如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

你不能在EF中这样做。您想要更新密钥以便保持顺序的原因是什么?这不应该是任何原因,但如果由于某种原因确实需要序列ID,则可以将其放在另一列中。

主键应该是任意的。它的唯一要求是它应该是唯一的。我以为你可能采取了错误的做法。