我有一组共享一些类似属性的对象,因此它们从基类继承这些属性。这是我正在做的一个简单的例子。
我有2个对象,Employee
和Customer
,它们都有相应的表格。每个都包含一个地址列表。 Address
类在两个对象之间共享,但位于两个单独的表EmployeeAddress
和CustomerAddress
中。
EmployeeAddress - EmployeeId uniqueidentifier
Address varchar (50)
ZipCode varchar (10)
City varchar (20)
State id NOT NULL
CustomerAddress - CustomerId uniqueidentifier
Address varchar (50)
ZipCode varchar (10)
City varchar (20)
State id NOT NULL
如何将Address对象映射到两个单独的表?我希望它能够在需要时从EmployeeAddress
或CustomerAddress
表中提取数据。
我试过了:
(EmployeeMap)
HasMany(x => x.Addresses).Table("EmployeeAddress").KeyColumn("EmployeeId");
但是nHibernate抱怨Address
类没有自己的映射类。
(AddressMap)
Id(x => x.Id);
Map(x => x.ParentItemId); //generic way to reference EmployeeId or CustomerId
// but I can't specify which column name it should
// actually be using
但是nHIbernate尝试从Address
表中抓取数据并且不存在,并且我的列名错误。
仅供参考:我将无法将两个地址表合并为一个。
答案 0 :(得分:0)
您可以创建彼此继承的映射
包含所有重复值的基本映射类:
public class AddressBaseMap<T> : ClassMap<T> where T : Address
{
public AddressBaseMap()
{
Map(x => x.Address);
//etc
}
}
public class CustomerAddressMap : AddressBaseMap<CustomerAddress>
{
public CustomerAddressMap()
{
Table("CustomerAddress");
}
}
我还建议使用组件,以便您可以将所有字段封装到一个类中。