我正在使用 Entity Framework 4.0 并且有一个我无法弄清楚的愚蠢问题。
我有两张桌子:
- Contact:Id(主键)、Value、ContactTypeId(ContactType 的外键)
- 联系人类型:ID(主键)、类型(家庭、手机、工作等)
实体框架创建了以下两个实体:
- 联系人:ID、值、联系人类型(导航属性)
- ContactType:Id、类型、联系人(导航属性)
我使用以下代码来获取联系人并更新该特定联系人的联系人类型:
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
,而是一项安全功能,以确保您不会inserting
同一个物体有两个不同的IDs
。因此,要实现您想要做的事情,只需创建一个新对象并将新创建的对象添加到database
.
** 这个问题经常发生在内部loops
。如果您使用的是while or foreach loop
,确保新创建的对象位于loop
body.
尝试这个:
Contact contact = dbContext.Contacts.Single(c => c.contactTypeId == 1234);
contact.contactTypeId = 4;
dbContext.AddObject(contact);
dbContext.SaveChanges();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)