Tricky Fluent Nhibernate моделирование с подклассами подклассов - PullRequest
1 голос
/ 16 сентября 2010

Я перемещаю проект из пользовательского DAL в Nhibernate, но столкнулся с непростым сценарием отображения, который не знаю, как решить. По сути, есть подклассы подкласса без значения дискриминатора.

Первичный подкласс имеет значение дискриминатора, чтобы оно было тривиальным. Проблема возникает, когда я добираюсь до третьего уровня. Единственное различие между подтипами типов заключается в том, какая таблица ссылается на них (в карте стилей HasOne).

Любая помощь будет принята с благодарностью, спасибо:)

1 Ответ

3 голосов
/ 17 сентября 2010

Если вы хотите, чтобы объекты третьего уровня были записями в одной и той же таблице, я бы добавил дискриминатор к типу третьего уровня. Это может быть вычисляемое свойство, основанное на родительском типе. Используя FluentNH, я думаю, что он должен быть видимым для картографа (вы не можете использовать хитрости, которые ванильный NHibernate должен рефлексивно исследовать частные члены).

Это если вы хотите, чтобы все они были в одной таблице. Если вы не слишком заботитесь о количестве таблиц в своей схеме, вы просто не можете включить дискриминатор, и / или определения схемы типов третьего уровня настолько различаются, что сопоставление с одной таблицей даст «странные» результаты ( как множество пустых столбцов или очень общих / неописательных имен столбцов), а затем просто создайте сопоставление для каждого конкретного подтипа с другой таблицей.

Вы также можете отменить нормализацию схемы. Поскольку это отношение HasOne (), подкласс может содержать столбцы класса третьего уровня с использованием сопоставления компонентов. Если все типы третьего уровня сопоставляются с похожими полями, и вы думаете, что маловероятно, что это отношение изменится с 1: 1 до 1: n, возможно, это правильный путь.

...