NHibernate继承映射

时间:2009-06-15 14:02:20

标签: c# sql nhibernate

我有一组如下所示的表:

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 - 我目前通过join-subclass映射每个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不允许执行诸如“From IFamilyMember”之类的HQL查询。我还希望能够通过其他标准来选择 - “从IFamilyMember m,其中m.Name.First ='blah'。我将如何映射这组类,以便我可以通过名称选择家庭成员等。 。?我是否必须修改我的类层次结构,以便IFamilyMember包含我想要查询的属性(名称等等)?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

为什么父母与子女有不同的实体?在标准的“家庭”意义上,每个人只是一个人 - 父/子是一种可能最好通过第二个表中表达的多对多关系建模的关系。