代码之家  ›  专栏  ›  技术社区  ›  Todd Langdon

FluentNHibernate多对一引用,其中外键不是主键,列名不同

  •  7
  • Todd Langdon  · 技术社区  · 16 年前

    我在这里坐了一个小时想弄清楚。。。

    我有两张表(缩写):

    CREATE TABLE TRUST 
    (
    TRUSTID NUMBER NOT NULL,
    ACCTNBR VARCHAR(25) NOT NULL
    )
    CONSTRAINT TRUST_PK PRIMARY KEY (TRUSTID)
    
    CREATE TABLE ACCOUNTHISTORY
    (
    ID NUMBER NOT NULL,
    ACCOUNTNUMBER VARCHAR(25) NOT NULL,
    TRANSAMT NUMBER(38,2) NOT NULL
    POSTINGDATE DATE NOT NULL
    )
    CONSTRAINT ACCOUNTHISTORY_PK PRIMARY KEY (ID)
    

    public class Trust
    {
        public virtual int Id {get; set;}
        public virtual string AccountNumber { get; set; }
    
    }
    
    public class AccountHistory
    {
        public virtual int Id { get; set; }
        public virtual Trust Trust {get; set;}
        public virtual DateTime PostingDate { get; set; }
        public virtual decimal IncomeAmount { get; set; }
    

    }

    如何在FluentNHibernate中进行多对一映射以使AccountHistory具有信任关系?特别是,由于它与TRUSTID的Trust主键不同,并且它引用的列的名称也不同(ACCTNBR vs.ACCOUNTNUMBER)????历史地图上的资料我怎么办???

    public class TrustMap : ClassMap<Trust>
    {
        public TrustMap()
        {
            Table("TRUST");
            Id(x => x.Id).Column("TRUSTID");
            Map(x => x.AccountNumber).Column("ACCTNBR");
        }
    }
    
    public class AccountHistoryMap : ClassMap<AccountHistory>
    {
        public AccountHistoryMap()
        {
            Table("TRUSTACCTGHISTORY");
            Id (x=>x.Id).Column("ID");
            References<Trust>(x => x.Trust).Column("ACCOUNTNUMBER").ForeignKey("ACCTNBR").Fetch.Join();
            Map(x => x.PostingDate).Column("POSTINGDATE");
            );
    

    我尝试了上面这行代码的一些不同变体,但是什么都没用——它收回了AccountHistory数据和信任的代理;但是它说没有具有给定标识符的信任行。

    这一定很简单。有人吗?

    提前谢谢。

    1 回复  |  直到 16 年前
        1
  •  14
  •   Jamie Ide    16 年前

    你需要使用 property-ref

    public class AccountHistoryMap : ClassMap<AccountHistory>
    {
        public AccountHistoryMap()
        {
            Table("TRUSTACCTGHISTORY");
            Id (x=>x.Id).Column("ID");
            References(x => x.Trust, "ACCOUNTNUMBER").PropertyRef("ACCTNBR").Fetch.Join();
            Map(x => x.PostingDate).Column("POSTINGDATE");
        }
    }