有人可以帮助我以最佳方式在流利的 nHibernate 中映射以下情况吗?Address 类在 Client 和 Company 中都使用。如何在 SQL 中最有效地存储它?映射应该是什么样的?我考虑过多种选择,但对于这些情况,我对 nHibernate 的经验不够:
使用 1 个地址实体和 1 个表并使用分母列来区分客户地址和公司地址 -> 如何在 nHibernate 中实现这一点?
使用 1 个地址实体和 2 个表(ClientAddresses 和 CompanyAddresses)--> 但我只能在类 Address 的映射中定义 1 个表
使用 2 个地址实体和 2 个表 --> 不那么优雅
当我开始实现公司类并意识到它也需要多个地址时,我刚刚偶然发现了这个问题。到目前为止,我有一个 Address 和 Client 类,并且它们之间有一个一对多的映射。在数据库中,地址有一个名为 ClientId 的额外列。但是在介绍公司课程时,我被困住了......
任何帮助将不胜感激。
我目前在使用自动映射的sharparch 1.5框架中工作,我的映射文件是这样的:
public class AddressMap : IAutoMappingOverride<Address>
{
public void Override(AutoMapping<Address> mapping)
{
mapping.Table("addresses");
mapping.Id(x => x.Id, "AddressGuid")
.UnsavedValue(Guid.Empty)
.GeneratedBy.GuidComb();
mapping.References(x => x.Client, "ClientGuid");
}
}
下面的更多代码说明了问题:
地址
public class Address
{
public virtual string StreetLine1 { get; set; }
public virtual string StreetLine2 { get; set; }
public virtual string PostalCode { get; set; }
public virtual string City { get; set; }
public virtual string Country { get; set; }
}
其中有下表:
表名 = 地址
字段 = AddressGuid、StreetLine1、StreetLine2、邮政编码、城市、国家
客户
public class Client
{
public IList<Address> Addresses {get;set;}
}
公司
public class Company
{
public IList<Address> Addresses {get;set;}
}