有人可以帮我找到流利的nHibernate中映射以下情况的最佳方法吗? Address类在Client和Company中使用。如何在SQL中最有效地存储它?那个映射应该是什么样的?我考虑过多种选择,但在这些情况下我对nHibernate的经验不足:
使用1个地址实体和1个表,并使用分母列来区分客户地址和公司地址 - >如何在nHibernate中实现它?
使用1个地址实体和2个表(ClientAddresses和CompanyAddresses) - >但我只能在类Address
使用2个地址实体和2个表 - >不那么优雅
当我开始实施公司类并意识到它还需要多个地址时,我偶然发现了这个问题。到目前为止,我有一个Address和Client类,并且它们之间有一对多的映射。在数据库中,Address有一个名为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; }
}
有下表:
tablename =地址
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;}
}
答案 0 :(得分:1)
答案 1 :(得分:0)
您可以将关系建模为多对多关系:许多公司到多个地址,许多客户到多个地址。
在公司和客户端映射中:
mapping.HasManyToMany(x => x.Addresses);
这将创建另外两个表:一个是公司和地址之间的映射,另一个是客户端和地址之间的映射。
理论上,这可能允许您可能不想要的共享情况(一些公司和所有共享的客户都有相同的地址行),但只要您的应用程序逻辑不允许这种情况发生,您就会很好,你不必用nhibernate做任何棘手的事。