我正在使用 Entity Framework 4.0 并遇到一个我无法弄清楚的愚蠢问题。
我有两个表:
- 联系人:Id(主键)、值、ContactTypeId(ContactType 的外键)
- ContactType:Id(主键)、Type(家庭、手机、工作等)
Entity Framework 创建了以下两个实体:
- 联系人:Id、值、ContactType(导航属性)
- 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/