4 nhibernate nhibernate-mapping
假设我们有一个Employee实体,由一些其他实体组成,例如一对多地址和联系人,以及一些字段(名称,年龄等).我们将此实体映射出来并且可以正常使用它,将每个部分保存到"Employee","EmployeeAddresses"和"EmployeeContacts"表中.
但是,我们几乎使用该员工的所有信息进行大型计算,并且具有单独的"EmployeeInput"对象,该对象由相同的Address和Contact对象列表组成(即Employee和EmployeeInputs对象都有一个Address和Contact实体列表).我们需要在预先计算计算时保存这些信息,以便以后进行审计.我们想将此EmployeeInput实体保存到数据库中的"EmployeeInput"表.
我们遇到的问题是如何保存地址和联系人列表?我们希望将它们添加到"EmployeeInputAddresses"和"EmployeeInputContacts"之类的内容中,但地址和联系人entites已分别映射到"EmployeeAddresses"和"EmployeeContacts".
如果不创建新的"EmployeeInputAddress"和"EmployeeInputContact"实体并为每个实体创建单独的映射文件(因为字段将逐个复制),最简单的方法是什么.换句话说,我们如何将单个实体Address映射到两个不同的表,具体取决于它所属的父对象(如果从Employee对象保存,则为EmployeeAddresses表,如果从EmployeeInput对象保存,则为EmployeeInputAddresses表).
小智 5
最简单的方法是将地址和联系人映射为复合元素.这样,您可以以不同的方式映射您的集合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;}
}
Run Code Online (Sandbox Code Playgroud)
会有映射映射:
<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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1902 次 |
| 最近记录: |