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

标签 nhibernate orm fluent-nhibernate

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

我有 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)

我有两个类,它们基本上反射(reflect)了这些:
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 的代理;但是它说没有给定标识符的信任行。

这必须是一些简单的事情。任何人?

提前致谢。

最佳答案

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

关于nhibernate - FluentNHibernate 多对一引用,其中外键不是主键,列名不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2890359/

相关文章:

c# - asp.net WebForms 中的 nhibernate 事务管理

nhibernate - 如何在 NHibernate >= 3.2 中配置 NHibernate 的二级缓存?

mysql - 如何在后端使用动态表单?

java - 如何在基于 JAVA 的 spring config 中配置 Hibernate Db 连接设置

asp.net mvc nhibernate 单元测试

c# - Nhibernate,确定是否已检索到延迟加载的集合

database - 插入 ORM 数据固定装置

fluent-nhibernate - 是否有 "just works"的 Fluent NHibernate Automapping 示例项目?

datetime - 带有日期的流畅 NHibernate 复合键

nhibernate - 在 nHibernate : "Index was out of range." 中更新时出错