Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 财产';itemId';是对象的一部分';s键信息,无法修改_C#_Sql_Database_Entity Framework_Linq - Fatal编程技术网

C# 财产';itemId';是对象的一部分';s键信息,无法修改

C# 财产';itemId';是对象的一部分';s键信息,无法修改,c#,sql,database,entity-framework,linq,C#,Sql,Database,Entity Framework,Linq,我有一个例外,说属性'itemId'是对象关键信息的一部分,不能修改。这是在我将原始sql查询更改为实体框架时发生的。下面是原始sql查询的代码,顺便说一下: con1.Open(); cmd1.CommandText = "UPDATE [stringInstrumentItem] SET [itemId] = @newId WHERE itemId = @oldId"; cmd1.Connection = con1;

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

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


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

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


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

您不能修改主键。在您的情况下,您需要删除旧项并使用相同的数据创建新项。您不能在EF:@Anton-yes中修改主键的值,因为每当我删除一个项时,它都会在itemId中创建一个间隙,例如,我有id 42 43 44,然后我删除43,它将与此42 44类似。我所做的是,我希望它是这样的42 43。id按顺序排列。@mm8-这是否意味着我应该创建一个自动生成的id(即PK)和另一个可以修改的id?是否正确?请参阅代理项,您无法修改主键。在您的情况下,您需要删除旧项并使用相同的数据创建新项。您不能在EF:@Anton-yes中修改主键的值,因为每当我删除一个项时,它都会在itemId中创建一个间隙,例如,我有id 42 43 44,然后我删除43,它将与此42 44类似。我所做的是,我希望它是这样的42 43。id按顺序排列。@mm8-这是否意味着我应该创建一个自动生成的id(即PK)和另一个可以修改的id?是吗?看代理键是的,这就是目的。我决定为自动生成的id和修改的id创建一个单独的列(这将使其保持顺序)。是的,这就是目的。我决定为自动生成的id和修改的id创建一个单独的列(这将使其保持顺序)。