Fluent NHibernate:在父项和子项的多个键列上引用另一个实体
我试图找出一种方法,使用被引用实体和引用实体的非主键,从一个实体引用另一个实体。我有以下资料:Fluent NHibernate:在父项和子项的多个键列上引用另一个实体,nhibernate,fluent-nhibernate,fluent-nhibernate-mapping,composite-primary-key,Nhibernate,Fluent Nhibernate,Fluent Nhibernate Mapping,Composite Primary Key,我试图找出一种方法,使用被引用实体和引用实体的非主键,从一个实体引用另一个实体。我有以下资料: public class UserContact { public virtual ulong ContactId { get; set;} public virtual ulong UserId { get; set; } public virtual ulong ContactUserId { get; set; } } public class EmergencyCon
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?
}
}
public类UserContactMap:ClassMap
{
公共用户ContactMap()
{
表(“用户联系方式”);
CompositeId().KeyProperty(x=>x.ContactId,“联系人ID”)
.KeyProperty(x=>x.UserId,“USER_ID”);
映射(x=>x.ContactUserId,“CONTACT\u USER\u ID”)
}
}
公共类EmergencyContactMap:ClassMap
{
公共紧急联系人地图()
{
表(“紧急联络”);
Id(x=>x.EmergencyContactId,“紧急联系人Id”);
Map(x=>x.UserId,“USER_ID”);
Map(x=>x.EmergencyUserId,“紧急用户ID”);
引用(x=>x.EmergencyUserContact)//。这里还有什么?
}
}
我需要引用EmergencyContact中的UserContact,以便EmergencyContact实体中的UserId和EmergencyUserId将映射到UserContact实体的UserId和ContactUserId列。最好的方法是什么?如果我有关于您的表的信息,我可以提供更多帮助 请重试以下操作
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\"");
}
}
公共类用户联系人
{
公共虚拟ulong ContactId{get;set;}
公共虚拟ulong用户标识{get;set;}
公共虚拟ulong ContactUserId{get;set;}
public ISet EmergencyContact{get;set;}//EmergencyContactId
}
公共类紧急联系人
{
公共虚拟ulong EmergencyContactId{get;set;}
公共虚拟ulong用户标识{get;set;}
公共虚拟ulong EmergencyContactUserId{get;set;}
公共虚拟用户联系人EmergencyUserContact{get;set;}
}
公共类UserContactMap:ClassMap
{
公共用户ContactMap()
{
表(“用户联系方式”);
CompositeId().KeyProperty(x=>x.ContactId,“CONTACT_ID”).keyperty(x=>x.UserId,“USER_ID”);
Map(x=>x.ContactUserId,“CONTACT_USER_ID”);
HasMany(x=>x.EmergencyContact)
.Access.CamelCaseField(前缀.下划线)
.Cascade.None()
.Fetch.Select()
1.资产()
.Inverse()
.LazyLoad()
.KeyColumns.Add(“\”EmergencyContactId\”);
}
}
公共类EmergencyContactMap:ClassMap
{
公共紧急联系人地图()
{
表(“紧急联络”);
Id(x=>x.EmergencyContactId,“紧急联系人Id”);
Map(x=>x.UserId,“USER_ID”);
引用(x=>x.EmergencyUserContact)
.Access.CamelCaseField(前缀.下划线)
.Cascade.None()
.Fetch.Select()
.Columns(“\”EmergencyContactId\”);
}
}