0

J'essaie de trouver un moyen de référencer une entité d'une autre à l'aide de clés non principales pour les entités référencées et de référence. Je donne les résultats suivants:NHibernate fluide: Référencement d'une autre entité sur plusieurs colonnes clés pour les deux parent et enfant

public class UserContact 
{ 
    public virtual ulong ContactId { get; set;} 
    public virtual ulong UserId { get; set; } 
    public virtual ulong ContactUserId { get; set; } 
} 

public class EmergencyContact 
{ 
    public virtual ulong EmergencyContactId { get; set; } 
    public virtual ulong UserId { get; set; } 
    public virtual ulong EmergencyContactUserId { get; set; } 
    public virtual UserContact EmergencyUserContact { get; set; } 
} 

La cartographie à UserContact utilise en fait une vue qui se termine-up duplication d'enregistrements sur la clé primaire (contactID) sur la table réelle. (Ceci est par conception.)

j'ai les applications suivantes:

public class UserContactMap : ClassMap<UserContact> 
{ 
    public UserContactMap() 
    { 
     Table("USER_CONTACT_VW"); 
     CompositeId().KeyProperty(x => x.ContactId, "CONTACT_ID") 
        .KeyProperty(x => x.UserId, "USER_ID"); 
     Map(x => x.ContactUserId, "CONTACT_USER_ID") 
    } 
} 

public class EmergencyContactMap : ClassMap<EmergencyContact> 
{ 
    public EmergencyContactMap() 
    { 
     Table("EMERGENCY_CONTACT"); 
     Id(x => x.EmergencyContactId, "EMERGENCY_CONTACT_ID"); 
     Map(x => x.UserId, "USER_ID"); 
     Map(x => x.EmergencyUserId, "EMERGENCY_USER_ID"); 
     References(x => x.EmergencyUserContact)//.What else goes here?  
    } 
} 

je dois faire référence à la UserContact dans le EmergencyContact afin que le UserId et EmergencyUserId de l'entité EmergencyContact traceront à l'ID utilisateur et ContactUserId colonnes de l'entité UserContact. Quelle est la meilleure façon de procéder?

Répondre

0

Si j'ai des informations sur vos tables, plus je peux aider.

essayez à nouveau les éléments suivants

public class UserContact 
{ 
    public virtual ulong ContactId { get; set;} 
    public virtual ulong UserId { get; set; } 
    public virtual ulong ContactUserId { get; set; } 
    public ISet<EmergencyContact> EmergencyContact { get; set; } // EmergencyContactId 
} 
public class EmergencyContact 
{ 
    public virtual ulong EmergencyContactId { get; set; } 
    public virtual ulong UserId { get; set; } 
    public virtual ulong EmergencyContactUserId { get; set; } 
    public virtual UserContact EmergencyUserContact { get; set; } 
} 
public class UserContactMap : ClassMap<UserContact> 
{ 
    public UserContactMap() 
    { 
     Table("USER_CONTACT_VW"); 
     CompositeId().KeyProperty(x => x.ContactId, "CONTACT_ID").KeyProperty(x => x.UserId, "USER_ID"); 
     Map(x => x.ContactUserId, "CONTACT_USER_ID"); 

     HasMany(x => x.EmergencyContact) 
     .Access.CamelCaseField(Prefix.Underscore) 
     .Cascade.None() 
     .Fetch.Select() 
     .AsSet() 
     .Inverse() 
     .LazyLoad() 
     .KeyColumns.Add("\"EmergencyContactId\""); 
    } 
} 

public class EmergencyContactMap : ClassMap<EmergencyContact> 
{ 
    public EmergencyContactMap() 
    { 
     Table("EMERGENCY_CONTACT"); 
     Id(x => x.EmergencyContactId, "EMERGENCY_CONTACT_ID"); 
     Map(x => x.UserId, "USER_ID"); 

     References(x => x.EmergencyUserContact) 
     .Access.CamelCaseField(Prefix.Underscore) 
     .Cascade.None() 
     .Fetch.Select() 
     .Columns("\"EmergencyContactId\""); 
    } 
}