c# - 属性 'Id'是对象关键信息的一部分,不可修改

标签 c# foreign-keys entity-framework-4

我正在使用 Entity Framework 4.0 并遇到一个我无法弄清楚的愚蠢问题。

我有两个表:

  1. 联系人:Id(主键)、值、ContactTypeId(ContactType 的外键)
  2. ContactType:Id(主键)、Type(家庭、手机、工作等)

Entity Framework 创建了以下两个实体:

  1. 联系人:Id、值、ContactType(导航属性)
  2. ContactType:Id、Type、Contact(导航属性)

我正在使用以下代码获取联系人并更新该特定联系人的联系人类型:

Contact contact = dbContext.Contacts.Single(c => c.Id == 12345);
contact.ContactType.Id = 3;

抛出以下异常:

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

看起来很简单!我不明白!

最佳答案

出现此问题是因为您多次引用同一个对象。这不是 EF 的限制,而是一种安全功能,可确保您不会插入具有两个不同 ID 的同一对象。因此,要实现您正在尝试做的事情,只需创建一个新对象并将新创建的对象添加到数据库中即可。

** 这个问题经常发生在循环内部。如果您使用的是 while 或 foreach 循环,请确保在循环体内有新创建的对象。

试试这个:

Contact contact = dbContext.Contacts.Single(c => c.contactTypeId == 1234);
contact.contactTypeId = 4;
dbContext.AddObject(contact);
dbContext.SaveChanges();

关于c# - 属性 'Id'是对象关键信息的一部分,不可修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3187963/

相关文章:

c# - Windows Phone - 如何获取 HTTP 状态代码?

c# - 基于不同XAML的样式继承

c# - 对这个单元测试感到困惑!

MySQL:如果存在外键则插入

c# - WPF 数据网格 : how to replace null values with 'n/a' automatically?

具有多个引用的mysql外键

sql-server - 如何删除引用表的所有 FK 约束并将它们添加回来?

.net - 自数据库创建以来,支持 <Database> 上下文的模型已发生更改

asp.net-mvc-3 - 为什么这会引发 NULL 值异常?

entity-framework-4 - 按 ID 的 EF4 通用搜索