У меня есть набор таблиц, которые выглядят следующим образом:
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 содержал свойства, по которым я хочу запросить (имя и т. Д.)? *
Спасибо за помощь!