я использую Платформу Объекта 4.0 и имею глупую проблему, которую я не могу выяснить.
У меня есть две таблицы:
Платформа объекта создала следующие два объекта:
Я использую следующий код, чтобы получить контакт и обновить тип контакта для того особого контакта:
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.
Это выглядит настолько простым! Я не получаю его!
Сущность, созданная фреймворком, не имеет свойства 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;
Попробуйте
contact.ContactType = differentContactType;
или
contact.ContactTypeId = 3;
Вы пытаетесь установить для идентификатора ContactType (контакта) значение 3.
Есть два типа ассоциаций. Независимая ассоциация, при которой связанный ключ будет отображаться только как свойство навигации. Второй - это ассоциация внешнего ключа, где связанный ключ может быть изменен с помощью внешнего ключа и свойства навигации. Итак, вы можете сделать следующее.
// общий вариант 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);