Свойство 'Id' является частью ключевой информации объекта и не может быть изменено

я использую Платформу Объекта 4.0 и имею глупую проблему, которую я не могу выяснить.

У меня есть две таблицы:

  1. Контакты: Идентификатор (первичный ключ), Значение, ContactTypeId (внешний ключ к ContactType)
  2. ContactType: идентификатор (Первичный ключ), Тип (Домой, Ячейка, Работа, и т.д.)

Платформа объекта создала следующие два объекта:

  1. Контакты: Идентификатор, значение, ContactType (свойство навигации)
  2. ContactType: идентификатор, введите, свяжитесь (свойство навигации)

Я использую следующий код, чтобы получить контакт и обновить тип контакта для того особого контакта:

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.

Это выглядит настолько простым! Я не получаю его!

38
задан Jacob 22 July 2019 в 04:40
поделиться

3 ответа

Сущность, созданная фреймворком, не имеет свойства contact.ContactTypeId. Он автоматически удалил его и создал ассоциацию ContactType внутри сущности Contact.

Способ заставить его работать, как вы предложили, заключается в создании объекта ContactType путем запроса к базе данных и присвоения его contact.ContactType. Например:

Contact contact = dbContext.Contacts.Single(c => c.Id == 12345);
ContactType contactType = dbContext.ContactType.Single(c => c.Id == 3);
contact.ContactType = contactType;
16
ответ дан 27 November 2019 в 03:44
поделиться

Попробуйте

contact.ContactType = differentContactType;

или

contact.ContactTypeId = 3;

Вы пытаетесь установить для идентификатора ContactType (контакта) значение 3.

5
ответ дан 27 November 2019 в 03:44
поделиться

Есть два типа ассоциаций. Независимая ассоциация, при которой связанный ключ будет отображаться только как свойство навигации. Второй - это ассоциация внешнего ключа, где связанный ключ может быть изменен с помощью внешнего ключа и свойства навигации. Итак, вы можете сделать следующее.

// общий вариант 1 вариант

var contacttype = new ContactType{Id = 3};
db.ContactTypes.Attach(contacttype);
customer.ContactType = contacttype;

вариант 2 внешний ключ параметр

contact.ContactTypeId = 3;

// общий вариант работает с внешним ключом и независимой ассоциацией

contact.ContactReference.EntityKey = new EntityKey("container.contactset","contacttypeid",3);
1
ответ дан 27 November 2019 в 03:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: