0

Я пытаюсь выяснить способ ссылки на один объект из другого, используя непервичные ключи как для ссылочных, так и для ссылочных объектов. У меня есть следующие:Fluent 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?  
    } 
} 

Мне нужно ссылаться на UserContact в EmergencyContact так что UserId и EmergencyUserId от EmergencyContact объекта будет отображать на UserId и 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\""); 
    } 
} 
Смежные вопросы