NHibernate одна таблица несколько значений - PullRequest
0 голосов
/ 08 мая 2011

У меня есть сопоставленный класс, что некоторые его значения являются кодами, и их фактическое значение существует в другой таблице с тремя столбцами: value_type, value_code и value.

Я знаю value_type поле foreach в моем сопоставленном классе, и я хочу отобразить его, чтобы получить value, где value_code равно коду в классе.

Мне было интересно, как я могу отобразитьчто-то в этом роде ... Я бы оценил любую помощь в этом вопросе.

1 Ответ

0 голосов
/ 09 мая 2011

Для дальнейшего использования ваш вопрос, как прокомментировали другие, плохо сформулирован и расплывчат, и, как правило, на него вряд ли ответят как есть.Но я понимаю, что вы пытаетесь сделать.

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

Чтобы отобразить это в NHibernate, вам нужно выполнить некоторые настройки:

1) Сначала вы должны создать иерархию наследования.Создайте базовый абстрактный класс, затем из этого базового класса создайте новый конкретный класс, по одному на каждое значение поля value_type.Таким образом, если value_type имеет три возможных значения: «Тип1», «Тип2» и «Тип3», у вас будет базовый абстрактный класс, а затем три производных класса, один для Типа1, один для Типа2 и один для Типа 3. Каждый класс.будет иметь свойство, которое будет содержать столбец value.

2) Создайте отображение для базового класса и производных классов. Вы должны использовать одну табличную модель. Столбец дискриминатора - value_type, истолбец идентификатора - value_code. Свойство в классе сопоставлено с value.

3) В классе, где вы хотите получить доступ к этим значениям, вы должны изменить тип каждого поля на тот жевведите в качестве класса, который вы создали для этого value_type.

Это должно работать для вас.

...