2013-12-17 2 views
1

Я пытаюсь изучить EF и столкнулся с некоторыми проблемами. У меня есть база данных, давайте упростим, 4 таблиц:Проблемы отображения наследования в Entity Framework

1) Items(NodeID, other fields), 
2) Nodes(NodeID, extra), 
3) Recipient(RecipientID, others) 
4) NodesRecipient(RecipientID, NodeID). 

Item-Node 1-1 отношения, первичный ключ NodeID Получатель имеет первичный ключ RecipientID и ключи NodesRecipient являются RecipientID и NodeID. Ниже приведена диаграмма Node inherits from item Я создал модель EF из базы данных выше, используя VS 2012. После создания модели я сделал Node, полученный из элементов, указав ее базу как Item и удалив связь 1-1 между ними. Я также сделал элементы абстрактными, так как я не хочу прямого манипулирования этим объектом.

Компилятор жалуется:

"Error 1 Error 3024: Problem in mapping fragments starting at line 266:Must specify mapping for all key properties (Items.nodeID) of the EntitySet Items." 

Но если я не использовать наследование, компилятор не будет жалоб, и это было прекрасно.

No inheritance

Что мой вопрос и как я могу получить вокруг него? Было бы неплохо, если EF разрешает наследование, и я думаю, что это возможно, поскольку он позволяет мне указать базовый класс, но я думаю, что могут быть некоторые ссылки, которые я мог пропустить при чтении документации Microsoft.

+0

Не указывая нам схему и отображение, это невозможно. Очевидно, что EF поддерживает наследование, но как вы пытались его сопоставить? –

ответ

3

Возможно, вам не хватает внешнего ключа из первичного ключа таблицы дочернего объекта и первичного ключа таблицы базового объекта.

После добавления FK обновите EDMX из схемы (из базы данных).

+0

Огромное вам спасибо, Дэнни за то, что вы терпеливы со мной, поскольку я только что играл с EF в первый раз этим утром. После того, как вы указали, я заметил, что NodeID в узле узла не является ключом. Но это поле является ключом в моей базе данных. Не уверен, почему ключ не был переведен правильно VS 2012. Но я попытаюсь воспроизвести и посмотреть, как это получится. Я считаю, что это связано с наследованием, хотя это касается только жалоб, когда я возился с базовым типом после того, как был сделан импорт. Если я оставлю это как есть, ошибки не было. Не уверен, что искать дальше. Код ошибки 3024, а не 3007 – user1205746

+1

Идентификатор не должен появляться в объекте наследуемого типа - он должен отображаться только для свойства базового типа. –

+0

Вот и все !!! Мне нужно удалить NodeID из Item !!. Я этого не знал! Огромное спасибо!! Я не могу сказать, насколько я ценю вашу помощь ... :) – user1205746

Смежные вопросы