Я использую EF 4.0 и WPF, и у меня была похожая проблема, и ....
нашел вопрос, который решил ее (по крайней мере, для меня) очень простым способом.
Потому что, как и вы, я подумал, что должно быть просто обновить поле в таблице (т.е. в вашем случае: Contact ), на которое ссылается чужой ключ из другой таблицы (т.е. в вашем случае : ContactType ).
Однако сообщение об ошибке:
".... является частью ключевой информации объекта и не может быть изменена."
появляется только при попытке обновить первичный ключ (который совсем не был моим намерением).
Внимательно изучил код XML моей EntityModel и нашел его:
<EntityType Name="Contact">
<Key>
<PropertyRef Name="ID" />
<PropertyRef Name="contactTypeID" /> <!-- This second line caused my problem -->
</Key>
<Property Name="ID" Type="int" Nullable="false" />
...
...
</EntityType>
По какой-то причине (возможно, я допустил какую-то глупую ошибку в своей базе данных), когда Visual Studio автоматически сгенерировал для меня DataModel из моей базы данных, он добавил в ту самую таблицу ( Contact ), где я хотел обновить поле (ContactTypeID
) a секунда PropertyRef
( вторая строка ).
Я только что удалил эту секунду PropertyRef
:
<PropertyRef Name="contactTypeID" />
в обоих магазине модели и концептуальной модели и .... проблема была решена :-)
Следовательно, остается как:
<EntityType Name="Contact">
<Key>
<PropertyRef Name="ID" />
</Key>
<Property Name="ID" Type="int" Nullable="false" />
...
...
</EntityType>
Обновления и вставки теперь работают плавно, как ребенок ....: -)
Следовательно, хорошая идея проверить XML модели данных и убедиться, что только ваш ПК указан как PropertyRef
. Работал на меня ...: -)