如何更新实体框架中的主键值?

Sey*_*avi 3 c# entity-framework

Person我有带有以下字段的表(以及实体数据模型中的实体) :

Name              Type
SocialID          String      
FirstName         String
LastName          String
Run Code Online (Sandbox Code Playgroud)

SocialID是主键。我想更新SocialID每条记录的值。但是,当我尝试在实体框架中更新此字段时,出现以下错误:

The property 'SocialID' is part of the object's key information and cannot 
be modified.
Run Code Online (Sandbox Code Playgroud)

我得到上述错误的代码是:

foreach (var p in Entity.Persons)
{
   p.SocialID= p.SocialID + "00";
   Entity.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

Ben*_*thy 5

正如其他人所提到的,你不能用代码来做到这一点。您必须在 SQL 中进行更新。在迁移中或直接在 SQL Server Management Studio 中(或者如果您使用不同的数据库,则在同等情况下)。

UPDATE Person -- Or 'Persons' if that's what your table is called
SET SocialID = SocialID + '00'
Run Code Online (Sandbox Code Playgroud)

如果您有其他表使用此列作为外键,则需要做更多的工作(您必须首先删除引用主键的所有表上的约束,然后修复数据并重新创建限制)。或者正如 Moe 在评论中所说,您可以将外键设置为在更新时级联。

  • 您可以将外键更改为在更新时级联,这应该会更容易。另一种选择是删除外键,更新表 A,然后更新表 B,然后重新创建外键。 (2认同)