3

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

Name              Type
SocialID          String      
FirstName         String
LastName          String

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

The property 'SocialID' is part of the object's key information and cannot 
be modified.

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

foreach (var p in Entity.Persons)
{
   p.SocialID= p.SocialID + "00";
   Entity.SaveChanges();
}

我怎么能这样做?

4

3 回答 3

4

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

UPDATE Person -- Or 'Persons' if that's what your table is called
SET SocialID = SocialID + '00'

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

于 2013-02-01T10:41:01.750 回答
2

据我所知,主键一旦生成就不能以编程方式更新,这违背了主键的目的。如果您使用新的主键再次插入所有数据并删除旧数据会更好。

于 2013-02-01T10:35:26.643 回答
-1

为什么要更改主键?实体框架将使用该字段来识别对象,当它是主键时您不能更改它的值。

根据第一个答案,我建议您将表 Person 更改为拥有自己的主键,假设 PersonID 并将 SocialID 作为 Social 表的外键。如果您需要一个人有多个社交记录,您可能需要创建其他表以将 PersonId 对应到多个 SocialId,从人员表中删除 SocialId。

于 2013-02-01T10:35:35.073 回答