NHibernate - 将同一实体映射到同一数据库中的不同表

标签 nhibernate nhibernate-mapping

假设我们有一个 Employee 实体,它由一些其他实体组成,例如一对多的地址和联系人,以及一些字段(姓名、年龄等)。我们映射了这个实体并且可以很好地使用它,将每个部分保存到“Employee”、“EmployeeAddresses”和“EmployeeContacts”表中。

然而,我们几乎使用所有员工的信息进行大计算,并有一个单独的“EmployeeInput”对象,由相同的 Address 和 Contact 对象列表组成(即 Employee 和 EmployeeInputs 对象都有一个 Address 和 Contact 实体的列表)。当我们为以后的审计目的进行计算时,我们需要保存这些信息。我们想将此 EmployeeInput 实体保存到数据库中的“EmployeeInput”表中。

我们遇到的问题是如何保存地址和联系人列表?我们想将它们粘贴到“EmployeeInputAddresses”和“EmployeeInputContacts”之类的东西中,但地址和联系人实体已经分别映射到“EmployeeAddresses”和“EmployeeContacts”。

在不创建新的“EmployeeInputAddress”和“EmployeeInputContact”实体并为每个实体创建单独的映射文件的情况下完成此操作的最简单方法是什么(因为这些字段实际上会被逐个复制)。换句话说,我们如何根据它所属的父对象将单个实体 Address 映射到两个不同的表(EmployeeAddresses 表,如果它是从 Employee 对象保存的,而 EmployeeInputAddresses 表,如果它是从 EmployeeInput 对象保存的)。

最佳答案

最简单的方法是将地址和联系人映射为复合元素。这样你就可以为 Employee 以不同的方式映射你的收藏。和 EmployeeInput因为映射归容器所有。

例如:

public class Employee
{
    public List<Address> Addresses{get; set;}
}


public class EmployeeInput
{
    public List<Address> Addresses{get; set;}
}

public class Address
{
    public string Street{get;set;}
    public string City{get; set;}
}

会有以下映射:
<class name="Employee" table="Employees">
    <id name="id">
        <generator class="native"/?
    </id>
    <list name="Addresses" table="EmployesAddresses">
        <key column="Id" />
        <index column="Item_Index" />
        <composite-element class="Address">
            <property name="Street" />
            <property name="City" />
        </composite-element>
    </list>
</class>

<class name="EmployeeInput" table="EmployeesInput">
    <id name="id">
        <generator class="native"/?
    </id>
    <list name="Addresses" table="EmployeesInputAddresses">
        <key column="Id" />
        <index column="Item_Index" />
        <composite-element class="Address">
            <property name="Street" />
            <property name="City" />
        </composite-element>
    </list>
</class>

关于NHibernate - 将同一实体映射到同一数据库中的不同表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/554200/

相关文章:

c# - NHibernate 按代码映射 ComponentAsId 中的列无效

c# - Nhibernate 无法反序列化可序列化的属性

NHibernate - 无需映射即可加入

java - 使用继承时 Hibernate ManyToMany 不起作用

nhibernate - 多态 NHibernate 映射

nhibernate - 映射可能没有行的扩展表

nhibernate - 在 Nhibernate 中加载与获取

使用 AliasToBeanResultTransformer 返回整数列表时,Nhibernate 属性未找到异常

c# - Nhibernate 在选择时做更新?

orm - 连接表中带有额外列的多对多映射