Многоканальные ссылки на FluentNHibernate, где внешний ключ не относится к первичному ключу, а имена столбцов отличаются - PullRequest
7 голосов
/ 23 мая 2010

Я сижу здесь целый час, пытаясь понять это ...

У меня есть 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 для доверия? В частности, поскольку он связан с другим столбцом, отличным от первичного ключа Trust в TRUSTID, а столбец, на который он ссылается, также имеет другое имя (ACCTNBR vs. ACCOUNTNUMBER) ???? Вот что у меня пока есть - как мне сделать ссылки на AccountMistoryMap для доверия ???

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 и прокси для Доверия; однако в нем отсутствует строка доверия с указанным идентификатором.

Это должно быть что-то простое. Кто-нибудь? * * 1016

Заранее спасибо.

1 Ответ

14 голосов
/ 23 мая 2010

Вам необходимо использовать 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");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...