2010-03-04 1177 views
8

Esta es la primera vez que estoy trabajando con FluentNhibernate Mapping y frente a una cuestión de cómo hacer referencia a otra tabla. Cualquier ayuda es apreciada:HasOne vs Referencias Mapping Fluido NHibernate

Tengo varias tablas llamadas CD_varname y todas estas contienen dos columnas - CÓDIGO y DESCR.

tengo una mesa principal llamada destinatario y tiene, dicen dos columnas, llamadas VIVO y sexo, ambos son de tipo y el número que hacer referencia a las tablas CD_ALIVE y CD_SEX. Si está Vivo = 1 en el Destinatario, entonces necesitamos obtener el código y descr de la tabla CD_ALIVE donde Código = 1.

he descrito una clase CODEF:

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

mi clase de destinatarios asigna éstos a un componente. clase de receptor se ve así:

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

Cuando mi nacimiento y la muerte clases son:

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 
} 

y mi clase de la muerte:

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

modo, la columna principal "vivo" en el receptor en realidad está haciendo referencia a mi Recipient.Death.Alive.Code

Tengo una clase de mapeo codef:

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

Estoy tratando de hacer el mapeo de destinatarios y aquí es donde estoy atascado. ¿Puedo hacer algo como esto:.

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

No está funcionando :( Cualquier ayuda es muy apreciada

Gracias

Respuesta

18

Creo que desee utilizar el mapeo References

.

HasOne significa que las 2 entidades que está mapeando juntas comparten un identificador "mutuamente exclusivo"

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

+1

Creo que el uso de la frase "mutuamente exclusivo" es incorrecto en este caso. Mutuamente excluyente significaría que habría una superposición cero entre el conjunto de identificadores en las dos tablas.Si entiendo correctamente la publicación del blog enlazado, creo que se refiere a un identificador compartido. – Dan

1

References es para un mapeo de propiedades.

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

y se necesita una Id para CODEF.

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

La convención por defecto es que los nombres de columna para que coincida con el nombre de propiedad, por lo que no tiene que especificar los nombres de columna a menos que sean diferentes.

+0

En ese caso de mapeo separado para Muerte, ¿cómo debo especificar en Asignación de destinatario? Debería ser: public RecipientMapping() { Id (x => x.ID); Mapa (x => x.Death); } ¿Pero cómo sabrá que debe unir la columna "Alive" en el destinatario a la columna "code" en la tabla CD_Alive? Lo siento, podría ser tonto en nhibernate en esta etapa. Gracias. – Aparna

+0

El enlace está roto. –

Cuestiones relacionadas