【问题标题】:NHibernate: Mapping multiple classes from a single table rowNHibernate:从单个表行映射多个类
【发布时间】:2010-04-06 06:06:56
【问题描述】:

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

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

我想创建一个如下所示的客户和地址类:

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 表有一个更加面向对象的视图。还有其他几个表中包含地址信息,如果有一个可重用的地址类来处理它们会很好。地址不共享,因此将所有地址用外键拆分成一个单独的表似乎有点过头了,实际上更痛苦,因为我需要多个表的外键。

有人可以告诉我这种类型的映射吗?可以的话请举个例子。

感谢您的任何见解!

-迈克

【问题讨论】:

    标签: nhibernate fluent-nhibernate nhibernate-mapping


    【解决方案1】:

    你应该在你的 NHibernate 映射文件中使用一个组件。 例如:

    <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阅读。

    【讨论】:

    • 当组件需要是接口或抽象类型时,如何映射组件?例如一个 IPayment,不是所有的 IPayment 实现都包含信用卡#?
    猜你喜欢
    • 2012-03-13
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多