Отображение наследования NHibernate - PullRequest
1 голос
/ 15 июня 2009

У меня есть набор таблиц, которые выглядят следующим образом:

Person - PersonID, FirstName, LastName, etc...<br/>
Family - FamilyID, etc...<br/>
Parent - PersonID, FamilyID, etc...<br/>
Child -  PersonID, FamilyID, etc...<br/>
Contact- PersonID, etc...<br/>

Моя иерархия объектов организована следующим образом (с использованием c #):

class Person
class Family
interface IFamilyMember

class Parent : Person, IFamilyMember
class Child : Person, IFamilyMember
class Contact : Person

Использование Nhibernate - в настоящее время я сопоставляю каждый из подклассов Person с помощью присоединенного подкласса, как показано ниже (ненужные поля удалены):

<!-- Parent -->
<joined-subclass name="Parent" table="Parent">
  <key column="PersonID" />
  <many-to-one name="Family" column="FamilyID" cascade="save-update" />
</joined-subclass>

<!-- Child -->
<joined-subclass name="Child" table="Child">
  <key column="PersonID" />
  <many-to-one name="Family" column="FamilyID" cascade="save-update" />
</joined-subclass>

<!-- Child -->
<joined-subclass name="Contact" table="Contact">
  <key column="PersonID" />
</joined-subclass>

Проблема состоит в том, что я ДЕЙСТВИТЕЛЬНО хотел бы иметь возможность выполнять запросы к интерфейсу IFamilyMember, а при текущем отображении NHibernate не позволяет выполнять запрос HQL, такой как «From IFamilyMember». Я также хотел бы иметь возможность выбирать по другим критериям - «Из IFamilyMember m, где m.Name.First =« бла ». Как бы я отобразил этот набор классов, чтобы я мог выбрать членов семьи по имени и т. Д .. .? Нужно ли изменять иерархию классов таким образом, чтобы IFamilyMember содержал свойства, по которым я хочу запросить (имя и т. Д.)? *

Спасибо за помощь!

1 Ответ

1 голос
/ 15 июня 2009

Почему Родитель и Дитя разные сущности? В обычном «семейном» смысле каждый из них является просто человеком - родитель / ребенок - это отношения, которые, вероятно, лучше всего смоделировать с помощью отношения «многие ко многим», выраженного во 2-й таблице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...