NHibernate:从单个表行映射多个类

时间:2010-04-06 06:06:56

标签: nhibernate fluent-nhibernate nhibernate-mapping

我找不到这个具体问题的答案。我试图保持我的域模型面向对象并尽可能重用对象。我在确定如何从单行提供到多个类的映射时遇到问题。让我用一个例子来解释:

我有一张桌子,称之为客户。客户有几个属性;但是,为简洁起见,假设它有Id,Name,Address,City,State,ZipCode。

我想创建一个如下所示的Customer和Address类:

public class Customer {
    public virtual long Id {get;set;}
    public virtual string Name {get;set;}
    public virtual Address Address {get;set;}
}

public class Address {
    public virtual string Address {get;set;}
    public virtual string City {get;set;}
    public virtual string State {get;set;}
    public virtual string ZipCode {get;set;}
}

我遇到的问题是确定Customer类中Address类的映射。没有地址表,也没有与客户关联的“一组”地址。我只想在代码中使用更面向对象的Customer表视图。还有其他几个表中包含地址信息,有一个可重用的Address类来处理它们会很不错。地址不是共享的,所以将所有地址分成带有外键的单独表格似乎有点矫枉过正,实际上,由于我需要多个表的外键,因此更加痛苦。

有人可以启发我这种类型的映射吗?如果可以,请提供一个例子。

感谢您的任何见解!

-Mike

1 个答案:

答案 0 :(得分:9)

您应该在NHibernate映射文件中使用Component。 例如:

<class name="Customer"
table="Customer">

<id name="Id">
    <generator class="identity"/>
</id>
<property name="Name" />
<component name="Address">
    <property name="Address"/>
    <property name="City"/>
    <property name="State"/>
    <property name="ZipCode"/>
</component>
</class>

可以在Ayende's blog中了解更多信息。