2010-05-23 2 views
7

Я сидел здесь в течение часа, пытаясь понять это ...FluentNHibernate Many-to-One Ссылки, где внешний ключ не первичный ключ и имена столбцов отличаются

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

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

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

+0

Почему вы не принимаете ответ, если он вам помог? – Alex

ответ

14

Вы должны использовать 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"); 
    } 
} 
+2

Спасибо, сэр, я спас мою жизнь :) –

Смежные вопросы