[Entity Framework] Вопрос по наследованию
От: BOleg Россия  
Дата: 17.06.08 07:46
Оценка:
Привет, форумчане.
Возник у меня вопрос с реализацией структуры на Entity Framework (VS2008 SP1 Beta).
Есть базовая табличка, содержащая поле — тип объекта. В зависимости от типа мапятся разные классики.
Однако некоторые классы содержат доп. информацию, которая хранится в соотв. таблицах хочется мапиться на эти таблицы тоже. Надеюсь понятно.
Однако замапить такую структуру у меня не получается...

База выдуманная и сделал только для объяснения ситуации. Вот структура базы:

Модель:


Тестовый проект: efwt.zip (185 кб, с БД)

Т.е. получается, что entity Table мапится на две таблицы: Furniture c условием TypeId=0 и на Tables; Chair мапится только на Furniture с условием Typeid=1. Furniture — абстрактный класс.

Однако Entity Framework не пропускает такую структуру: либо на этапе компиляции, либо при выполнении валится исключение.
Использовать Table per Hierarchy, Table per Type или Table per Concrete Type получается, а вот совместить эти модели — фиг.
Подскажите, куда копать?
В человечишке все должно быть прекрасненьким: и одёжка, и душенка, и мордочка, и мыслишки.
entity framework
Re: [Entity Framework] Вопрос по наследованию
От: BOleg Россия  
Дата: 17.06.08 16:05
Оценка:
up
В человечишке все должно быть прекрасненьким: и одёжка, и душенка, и мордочка, и мыслишки.
Re: [Entity Framework] Вопрос по наследованию
От: stump http://stump-workshop.blogspot.com/
Дата: 17.06.08 19:09
Оценка: 4 (1)
Здравствуйте, BOleg, Вы писали:

BO>Однако Entity Framework не пропускает такую структуру: либо на этапе компиляции, либо при выполнении валится исключение.

BO>Использовать Table per Hierarchy, Table per Type или Table per Concrete Type получается, а вот совместить эти модели — фиг.
BO>Подскажите, куда копать?

Все нормально получется. Вот, смотри:


Поля Furniture.Seat и Tables.Desk я добавил для иллюстрации маппинга.
Обрати внимание, что Tables мапится на две таблицы, а Chair на одну. Поля TypeId нет ни в одной сущности — это поле дескриминатор, оно используется в условиях маппинга и будет менеджиться автоматически.
Подробно о маппинге в EF я писал здесь:
Entity Framework — mapping (часть 1)
Entity Framework — mapping (часть 2)
Понедельник начинается в субботу
Re[2]: [Entity Framework] Вопрос по наследованию
От: BOleg Россия  
Дата: 19.06.08 05:26
Оценка:
Здравствуйте, stump, Вы писали:

S>Поля TypeId нет ни в одной сущности — это поле дескриминатор, оно используется в условиях маппинга и будет менеджиться автоматически.

Спасибо, это был ключевой момент.
В человечишке все должно быть прекрасненьким: и одёжка, и душенка, и мордочка, и мыслишки.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.