2010-05-23 4 views
7

Ich habe hier eine Stunde lang sitzen versuchen, das herauszufinden ...FluentNHibernate Many-To-One Referenzen wo Fremdschlüssel nicht auf Primärschlüssel und Spaltennamen sind verschiedene

I 2 Tische haben (abgekürzt):

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) 

ich habe 2 Klassen, die im wesentlichen diese Spiegel:

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; } 

}

Wie mache ich das Viele-zu-Eins-Mapping in FluentNHibernate, um die AccountHistory mit einem Trust zu versehen? Insbesondere, da es in einer anderen Spalte als der Trust-Primärschlüssel von TRUSTID verwandt ist und die Spalte, auf die es verweist, auch anders benannt wird (ACCTNBR vs. ACCOUNTNUMBER)? Hier ist, was ich bisher habe - wie mache ich die Referenzen auf der AccountHistoryMap zu vertrauen ???

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"); 
     ); 

Ich habe ein paar verschiedene Variationen der obigen Linie versucht, kann aber nichts an die Arbeit - es zurück AccountHistory Daten und einen Proxy für den Trust zieht; Es wird jedoch keine Trust-Zeile mit angegebenem Bezeichner angezeigt.

Dies muss etwas Einfaches sein. Jemand?

Vielen Dank im Voraus.

+0

Warum nicht Sie akzeptieren die Antwort, wenn es Ihnen geholfen? – Alex

Antwort

14

Sie müssen property-ref verwenden:

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

Danke Sir, du hast mein Leben gerettet :) –

Verwandte Themen