使用NHibernate映射一对多的最简单方法

时间:2015-05-01 10:20:36

标签: c# nhibernate orm nhibernate-mapping

我是NHibernate和C#的新手,所以请保持温和!

我有以下两个NHibernate实体:

Employee
{
    private long _id;
    private String _name;
    private String _empNumber;
    private IList<Address> _addresses;

    //Properties...
}

Address
{
    private long _id;
    private String _addrLine1;
    private String _addrLine2;
    private String _city;
    private String _country;
    private String _postalCode;

    //Properties
}

他们与one-to-manyEmployee 的关系Address 员工可以在其记录中拥有多个地址。方便地忽略 多个员工可能居住在同一地址的事实。

我从内存中的对象(NHibernate)的角度理解这一点 实体)。我正在努力的是映射文件(我正在考虑 这里简单的例子)。这是我到目前为止所提出的:

// Intentionally left out XML and <hibernate-mapping> 
// Mappings for class 'Employee'. -->
<class name="Employee" table="Employees">
    <id name="ID">
        <generator class="native">
    </id>

    <property name="Name" />
    <property name="EmpNumber" />

    <bag name="Addresses">
        <key column="AddressId" />
        <one-to-many class="Address" />
    </bag>
</class>

// Intentionally left out XML and <hibernate-mapping> .
// Mappings for class 'Address'
<class name="Address" table="Addresses">
    <id name="ID">
        <generator class="native">
    </id>

    // Intentionally left out name="Employee" 
    // as I don't have corresponding field in Address entity.
    <many-to-one class="Employee" column="EmployeeID" cascade="all" />

    <property name="AddrLine1" />
    <property name="AddrLine2" />
    <property name="City" />
    <property name="Country" />
    <property name="PostalCode" />
</class>
  1. 这是对的吗?
  2. 如果没有,我在这里看到的似乎是Address中的一个字段 实体,它是对应Employee实体的引用。但如果 所以,我无法理解为什么这是必需的:我不需要取一个 来自Address的{​​{1}},只是反过来......

1 个答案:

答案 0 :(得分:1)

您应该在all-delete-orphan关系中添加级联one-to-many,如果删除Employee,地址也将被删除。

如果您不需要Employee引用,请创建inverse=false这样的关系:here