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\""); 
    } 
} 
相关问题