Это упрощенная версия проблемы, которую я пытаюсь решить:
Есть две сущности:
Item
ItemID (PK)
Другие простые свойства ...
WorkItem (свойство навигации)
WorkItem
ItemID (PK)
Другие простые свойства ...
Item (свойство навигации)
Мне нужно создать Item, WorkItem для него, и мне нужно установить оба свойства навигации, чтобы эти два объекта могли указыватьперед сохранением.
Это я могу сделать:
Item newItem = Item.CreateItem(0, blah,blah,blah);
service.AddToItems(newItem);
WorkItem newWorkItem = new WorkItem();
service.AddToWorkItems(newWorkItem);
//set the navigation properties
newItem.WorkItem = newWorkItem;
newWorkItem.Item = newItem;
К сожалению, когда дело доходит до сохранения, это не удается.Я полагаю, что EF, пытаясь установить связь элементов WorkItem, пытается установить первичный ключ WorkItem.
Может кто-нибудь рассказать мне о правильном способе достижения этого, пожалуйста?
Обновить:Итак, я попытался построить модель с использованием наследования.Модель строит и проверяет.
К сожалению, добавление службы данных WCF для моей модели и попытка просмотра службы в браузере дает мне следующее:
..... <m:message xml:lang="en-US">An error occurred while processing this request. </m:message>
<m:innererror>
<m:message>Navigation Properties are not supported on derived entity types. Entity Set 'app_Items' has a instance of type 'tempmodel.app_CostItem', which is an derived entity type and has navigation properties. Please remove all the navigation properties from type 'tempmodel.app_CostItem'.</m:message>
<m:type>System.InvalidOperationException</m:type>
<m:stacktrace> at System.Data.Services.Serializers.SyndicationSerializer.WriteObjectProperties(IExpandedResult expanded, ......
CostItem - другая сущность, напримерWorkItem, который является производным от Item.