一尘不染

属性“ Id”是对象键信息的一部分,无法修改

c#

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

我有两个表:

  1. 联系人:Id(主键),值,ContactTypeId(ContactType的外键)
  2. ContactType:Id(主键),Type(家庭,单元格,单位等)

实体框架创建了以下两个实体:

  1. 联系人:Id,值,ContactType(导航属性)
  2. 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.

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


阅读 1046

收藏
2020-05-19

共1个答案

一尘不染

由框架创建的实体没有contact.ContactTypeId属性。它自动将其删除,并在Contact实体内部创建了ContactType关联。

如您所建议的,使其工作的方法是通过查询数据库并将其分配给contact.ContactType来创建ContactType对象。例如:

Contact contact = dbContext.Contacts.Single(c => c.Id == 12345);
ContactType contactType = dbContext.ContactType.Single(c => c.Id == 3);
contact.ContactType = contactType;
2020-05-19