【发布时间】:2011-02-15 03:22:53
【问题描述】:
有人可以帮助我用流利的 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; }
}
其中有下表:
表名 = 地址
fields= AddressGuid, StreetLine1, StreetLine2, PostalCode, City, Country
客户
public class Client
{
public IList<Address> Addresses {get;set;}
}
公司
public class Company
{
public IList<Address> Addresses {get;set;}
}
【问题讨论】:
-
可悲的是我有完全相同的问题。让我们看看能不能得到一些指导。
标签: nhibernate mapping entity automapping