【问题标题】:FluentNHibernate Many-To-One References where Foreign Key is not to Primary Key and column names are differentFluentNHibernate 多对一引用,其中外键与主键不同且列名不同
【发布时间】:2010-05-23 01:07:45
【问题描述】:

我已经在这里坐了一个小时试图弄清楚这个......

我有 2 个表(缩写):

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)

我有 2 个类基本上反映了这些:

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 与 ACCOUNTNUMBER)????这是我到目前为止所拥有的 - 我如何在 AccountHistoryMap 上进行引用以信任?

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 数据和 Trust 的代理;但是它说没有给定标识符的信任行。

这一定很简单。有人吗?

提前致谢。

【问题讨论】:

  • 如果它对您有帮助,您为什么不接受答案?

标签: nhibernate orm fluent-nhibernate


【解决方案1】:

你需要使用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");
    }
}

【讨论】:

  • 谢谢你,先生,你救了我的命:)
猜你喜欢
  • 2019-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-02
  • 2018-06-13
  • 2021-09-12
相关资源
最近更新 更多