2010-03-04 13 views
8

Questa è la prima volta che lavoro con FluentNhibernate Mapping e affronta una questione su come fare riferimento a un'altra tabella. Qualsiasi aiuto è apprezzato:Mapping HasOne vs Referenze Fluente NHibernate

Ho diverse tabelle denominate CD_ varname e tutte queste contengono due colonne: CODICE e DESCR.

ho una tabella principale denominata destinatario ed ha, diciamo due colonne, dette VIVO e sesso, entrambi sono di tipo numerico, ed essi riferimento alle tabelle CD_ALIVE e CD_SEX. Se Alive = 1 nel Destinatario, allora dobbiamo ottenere il codice e descr dalla tabella CD_ALIVE dove Code = 1.

ho descritto una classe Codef:

public Class Codef 
{ 
    int Code { get; set; } 
    string Descr { get; set; } 
} 

Mia classe destinatario assegna questi per un componente. Classe destinatario appare così:

public Class IRecepient 
{ 
    int ID { get; set; } 
    Birth Birth {get; set;} 
    Death Death { get; set; } 
} 

Dove le mie classi nascita e morte sono:

public Class Birth 
{ 
    DateTime BDate { get; set; } 
    Codef Sex { get; set; } 
    Codef Ethnicity { get; set; } //CD_ETHNICITy Table 
    Codef Race { get; set; } //CD_RACE Table 
} 

e la mia morte Classe:

public Class Death 
{ 
    DateTime DeathDate { get; set; } 
    Codef Alive { get; set; } 
} 

modo, la colonna principale "Alive" in destinatario in realtà fa riferimento al mio Recipient.Death.Alive.Code

I Ho una classe di mappatura codef:

public CodefMapping() 
     { 
      Map(x => x.Code, "CODE"); 
      Map(x => x.Descr, "DESCR"); 
     } 

Sto cercando di eseguire la mappatura del destinatario e questo è il punto in cui sono bloccato. Posso fare qualcosa del genere:.

HasOne<CodefMapping>(c => c.Death.Alive) 
        .PropertyRef(c => c.Code) 
        .PropertyRef(c => c.Descr) 
        .WithForeignKey("ALIVE"); 

Non funziona :( Qualsiasi aiuto è molto apprezzato

Grazie

risposta

18

Penso che si desidera utilizzare la mappatura References

.

HasOne significa che le 2 entità che si stanno mappando condividono un identificatore "reciprocamente esclusivo"

http://jagregory.com/writings/i-think-you-mean-a-many-to-one-sir/

+1

Penso che l'uso della frase "mutuamente esclusivo" non sia corretto in questo caso. L'esclusione reciproca significherebbe la sovrapposizione zero tra il set di identificatori nelle due tabelle.Se capisco correttamente il post del blog collegato, penso che indichi un identificatore condiviso. – Dan

1

References è per una mappatura di proprietà.

public DeathMap() 
{ 
    References(x => x.Alive);   
} 

E hai bisogno di un Id per codef.

public CodefMapping() 
{ 
    Id(x => x.Code); 
    Map(x => x.Descr); 
} 

La convenzione di default è per i nomi delle colonne in base al nome della proprietà, in modo da non è necessario specificare i nomi delle colonne a meno che non sono diversi.

+0

In questo caso di mappatura separata per Morte, , come dovrei specificare in Mappatura destinatari? Dovrebbe essere: public RecipientMapping() { Id (x => x.ID); Mappa (x => x.Death); } Ma come farà a sapere che dovrebbe legare la colonna "Alive" nel destinatario alla colonna "codice" nella tabella CD_Alive? Scusate, potrei essere stupido in stato di necrosi in questa fase. Grazie. – Aparna

+0

Il collegamento è interrotto. –

Problemi correlati