C#Nhibernate映射通讯录到不同的实体

时间:2014-02-04 22:06:11

标签: c# sql nhibernate fluent-nhibernate

我正在使用旧数据库,我正在尝试切换到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,但我无法理解。

我知道它不是以最好的方式构建,但我试图让它工作,因为我无法改变数据库的结构。

0 个答案:

没有答案