删除和添加替换EF实体给予实体密钥成员无法更改错误

时间:2014-01-23 16:14:00

标签: c# entity-framework

我有3个表:ContentLanguageContent_LanguageContent_Language有两个外键,一个用于Content,另一个用于Language

在代码中,我通过以下方式删除Content_Language中的一个关联:

content.Content_Language.Remove(cl);

然后添加另一个(不同的语言,相同的内容记录);

content.Content_Language.Add(new Content_Language() { LanguageId = 6 };

当我致电SaveChanges时,我得到:

“Content_Language”类型的实体实例上的关键成员“ContentId”的值已更改。无法更改实体密钥成员。

我可以告诉他,我正在移除一个项目并添加另一个项目。为什么这是一个问题?

1 个答案:

答案 0 :(得分:1)

Content_Language有一个由LanguageIdContentId组成的复合主键。当你实例化这样的一个:  new Content_Language() { LanguageId = 6 },然后创建一个ContentId为零的实例。

然后,您将其添加到Content_Language导航集合中,当EF执行修复时,它会尝试将ContentId更改为content.Id的值。但EF不允许您更改主键。因此你的错误。

您应该能够这样做:

var cl = new Content_Language() { LanguageId = 6, ContentId = content.ID }

您也不需要将其添加到content.Content_Language集合,因为EF修复会为您执行此操作