Свойство Id является частью ключевой информации объекта и не может быть изменено - PullRequest
37 голосов
/ 06 июля 2010

Я использую Entity Framework 4.0 и у меня глупая проблема, которую я не могу понять.

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

  1. Контакт: Id (первичный ключ), Значение, ContactTypeId (внешний ключ для ContactType)
  2. ContactType: Id (первичный ключ), тип (домашний, сотовый, рабочий и т. Д.)

Entity Framework создал следующие две сущности:

  1. Контакт: Id, Значение, 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.

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

Ответы [ 14 ]

0 голосов
/ 26 марта 2019

Вы должны добавить

 db.Entry(contact).State = EntityState.Detached;

После .SaveChanges ();

0 голосов
/ 24 января 2019

В моем случае ошибка появлялась, когда я удалял атрибут KEY поля ID.

// [Key]
public long Id { get; set; }

Итак, просто поместив атрибут на место, все заработало снова!

[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long Id { get; set; }
0 голосов
/ 26 июня 2018

В моем случае я создавал объект, объявленный и инициализированный вместе.Я только что инициализировал в конструкторе или что вы можете инициализировать объект при необходимости.

0 голосов
/ 14 сентября 2017

Просто надеясь, что это поможет кому-то другому, после нескольких часов борьбы с этим, потому что я знал, что не обновлял PK, и у меня определенно был PK.У меня была привязка значения PK к строке меню, чтобы показать текущее значение PK, и это вызывало проблему.

...