Привет, форумчане.
Возник у меня вопрос с реализацией структуры на Entity Framework (VS2008 SP1 Beta).
Есть базовая табличка, содержащая поле — тип объекта. В зависимости от типа мапятся разные классики.
Однако некоторые классы содержат доп. информацию, которая хранится в соотв. таблицах хочется мапиться на эти таблицы тоже. Надеюсь понятно.
![](/Forum/Images/smile.gif)
Однако замапить такую структуру у меня не получается...
База выдуманная и сделал только для объяснения ситуации. Вот структура базы:
![](http://files.rsdn.org/3548/db.jpg)
Модель:
Тестовый проект:
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 получается, а вот совместить эти модели — фиг.
Подскажите, куда копать?
В человечишке все должно быть прекрасненьким: и одёжка, и душенка, и мордочка, и мыслишки.
В человечишке все должно быть прекрасненьким: и одёжка, и душенка, и мордочка, и мыслишки.
Здравствуйте, 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)
В человечишке все должно быть прекрасненьким: и одёжка, и душенка, и мордочка, и мыслишки.