0

我想找出一種方法來引用另一個實體使用非主鍵的引用和引用實體。我有以下:流利的NHibernate:在父鍵和子鍵的多個鍵列上引用另一個實體

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

到UserContact映射實際使用的圖,其中端部向上對實際的表的主鍵(使用ContactID)複製記錄。 (這是由設計。)

我有以下映射:

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

我需要在EmergencyContact內引用UserContact使得從EmergencyContact實體的用戶ID和EmergencyUserId將映射到用戶標識和ContactUserId UserContact實體的列。做這個的最好方式是什麼?

回答

0

如果我有關於你的表的信息,我可以幫助更多。

再試以下

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\""); 
    } 
} 
相關問題