Поддерживает ли NHibernate отображение абстрактного класса на разные таблицы с использованием составных идентификаторов? - PullRequest
1 голос
/ 05 августа 2009

У меня есть сложная база данных 3NF для конкретного проекта. Я хотел бы избежать использования доменного имени класса для таблицы. Скорее, я хотел бы смоделировать свои доменные объекты после того, как они используются с концептуальной точки зрения бизнеса.

Проблема в том, как правильно сохранить эту информацию. Я знаю, что могу пойти по пути ADO, но я бы хотел попробовать NHibernate, успешно применив его в других проектах с более гибкими хранилищами данных.

Итак, мне нужно знать, будет ли NHibernate поддерживать следующий сценарий:

У меня есть концептуальный объект, известный как ProjectStatus, который состоит из нескольких штампов даты для различных действий и некоторых заметок о состоянии. Все данные, которые составляют ProjectStatus, поступают из 2 или более таблиц. Нет таблицы ProjectStatus.

Я знаю, что могу сделать подкласс union в моем отображении NH, чтобы заставить это работать, но ...

Одна из таблиц, которая содержит большую часть необходимой мне информации, имеет составной идентификатор (два поля PK, которые вместе составляют идентификационную подпись). Я знаю, что NH также поддерживает составные идентификаторы, но как я могу сопоставить объединение на составном ключе? Нужно ли указывать составной ключ под разделом union-subclass?

DBA отказалась сдвинуться с места в своей почти невротической модели данных 3NF, поэтому я застрял на этом фронте. Если мне придется упасть в ADO для простоты / скорости разработки, пусть будет так, но я надеюсь, что NH поднимется выше ...

1 Ответ

0 голосов
/ 05 августа 2009

Я понял, что у вас есть базовый класс и два подкласса, которые вы хотите отобразить на две таблицы подклассов, используя стратегию отображения таблиц на конкретные классы. Две таблицы подклассов должны объявлять одни и те же первичные ключи, а первичные ключи должны отображаться в отображении базового класса. Вы должны объявить id или composite-id в отображении базового класса, чтобы можно было запросить у NHibernate объект типа базового класса с заданным идентификатором или составным идентификатором. Вы не можете объявить их в отображении подкласса, и вы, конечно, не можете объявить их разными для каждого типа подкласса (это то, что их объявление в отображении подкласса позволит вам сделать), потому что из строго * -типа объектно-ориентированная перспектива, которая покидает сферу здравомыслия.

* Строгая типизация, для меня, означает, что переменные статически типизированы (тип каждой переменной известен и применяется компилятором), а объекты строго типизированы (тип каждого объекта известен и применяется в среде выполнения ).

...