我正在使用旧数据库,我正在尝试切换到Nhibernate。
我有一个表具有不同实体的地址(客户端,供应商......) 地址簿有一个类型列,用于区分它所用的实体类型。
问题 映射客户端的地址簿
这是我的数据库结构
客户表
ID身份(PK) 平衡十进制
地址表 输入int(例如:0 =客户,1 =供应商..等) ,ItemID int(clientid,vendorid ..... etc) ,地址1 nvarchar(100) ,地址2 nvarchar(100) ,城市nvarchar(100) (Type,ItemID)(PK)
这是我的课程
public partial class Client
{
public virtual int ID{get;set;}
public virtual Address BillingAddress{get;set;}
}
public class AddressBook
{
public virtual int ID { get;set; }
public virtual int ItemID { get;set; }
public virtual int Type { get;set; }
public virtual string Address1 { get;set; }
public virtual string Address2 { get;set; }
public virtual string City { get;set; }
}
public partial class ClientMap : ClassMap<Client>
{
public ClientMap()
{
Table("Clients");
LazyLoad();
Id(x => x.ID).GeneratedBy.Identity().Column("ID");
/// i am trying to do something like that
///HasOne(x => x.BillingAddress).ForeignKey("ItemID").ForeignKey("Type =1")
}
}
public partial class AddressBookMap : ClassMap<AddressBook>
{
public AddressBookMap()
{
Table("AddressBook");
LazyLoad();
CompositeId().KeyProperty(x => x.Type, "Type").CustomType<int>()
.KeyProperty(x => x.ItemID, "ItemID");
Map(x => x.ID).Column("ID").Not.Nullable().ReadOnly();
Map(x => x.Address1).Column("Address1");
Map(x => x.Address2).Column("Address2");
Map(x => x.City).Column("City");
}
}
我尝试使用Tuplizer和Component,但我无法理解。
我知道它不是以最好的方式构建,但我试图让它工作,因为我无法改变数据库的结构。