Fluent nhibernate 通过自动映射将同一类型的多个属性映射为HasMany
我正在尝试将同一类型的属性映射到OneToMany关联上。我试着用描述来区分,但有点困在这里了Fluent nhibernate 通过自动映射将同一类型的多个属性映射为HasMany,fluent-nhibernate,automapping,Fluent Nhibernate,Automapping,我正在尝试将同一类型的属性映射到OneToMany关联上。我试着用描述来区分,但有点困在这里了 public class User { public virtual int UserId { get; set; } public virtual string UserName { get; set; } [Description("From")] public virtual IList<Message> FromMessageList { get;
public class User
{
public virtual int UserId { get; set; }
public virtual string UserName { get; set; }
[Description("From")]
public virtual IList<Message> FromMessageList { get; set; }
[Description("To")]
public virtual IList<Message> ToMessageList { get; set; }
}
public class Message
{
public virtual int MessageId { get; set; }
public virtual string Text { get; set; }
[Description("From")]
public virtual User FromUser { get; set; }
[Description("To")]
public virtual User ToUser { get; set; }
}
public class DefaultHasManyConvention : IHasManyConvention
{
public void Apply(IOneToManyCollectionInstance instance)
{
if (instance.OtherSide.Property.GetDescription() == instance.Member.GetDescription())
{
if (instance.Member.GetDescription() != null)
instance.Key.Column(instance.Member.GetDescription() + "Id");
else
instance.Key.Column(instance.OtherSide.Property.Name + "Id");
instance.Fetch.Select();
}
}
}
public class DefaultReferenceConvention : IReferenceConvention
{
public void Apply(IManyToOneInstance instance)
{
if (instance.Property.GetDescription() != null)
instance.Column(instance.Property.GetDescription() + "Id");
else
instance.Column(instance.Property.Name + "Id");
instance.Fetch.Select();
}
}
公共类用户
{
公共虚拟int用户标识{get;set;}
公共虚拟字符串用户名{get;set;}
[说明(“来源”)]
公共虚拟IList FromMessageList{get;set;}
[说明(“至”)]
公共虚拟IList到消息传递者{get;set;}
}
公共类消息
{
公共虚拟int MessageId{get;set;}
公共虚拟字符串文本{get;set;}
[说明(“来源”)]
公共虚拟用户FromUser{get;set;}
[说明(“至”)]
公共虚拟用户ToUser{get;set;}
}
公共类DefaultHasManyConvention:IHasManyConvention
{
public void Apply(IOneToManyCollectionInstance实例)
{
if(instance.OtherSide.Property.GetDescription()==instance.Member.GetDescription())
{
if(instance.Member.GetDescription()!=null)
instance.Key.Column(instance.Member.GetDescription()+“Id”);
其他的
instance.Key.Column(instance.OtherSide.Property.Name+“Id”);
instance.Fetch.Select();
}
}
}
公共类DefaultReferenceConvention:IReferenceConvention
{
public void Apply(IManyToOneInstance实例)
{
if(instance.Property.GetDescription()!=null)
列(instance.Property.GetDescription()+“Id”);
其他的
列(instance.Property.Name+“Id”);
instance.Fetch.Select();
}
}
对于一对多关系,我通常使用如下编码:
public class User
{
public int UserId { get; set; }
public string UserName { get; set; }
[Description("From")]
public virtual ICollection<Message> FromMessageList { get; set; }
[Description("To")]
public virtual ICollection<Message> ToMessageList { get; set; }
}
public class Message
{
public int MessageId { get; set; }
public string Text { get; set; }
[Description("From")]
public virtual User FromUser { get; set; }
// From user foreign key column
[ForeignKey("FromUser")]
public int FromUserId {get;set;}
[Description("To")]
public virtual User ToUser { get; set; }
// ToUser foreign key column
[ForeignKey("ToUser")]
public int ToUserId {get;set;}
}
公共类用户
{
public int UserId{get;set;}
公共字符串用户名{get;set;}
[说明(“来源”)]
来自MessageList{get;set;}的公共虚拟ICollection
[说明(“至”)]
对消息传递者的公共虚拟ICollection{get;set;}
}
公共类消息
{
public int MessageId{get;set;}
公共字符串文本{get;set;}
[说明(“来源”)]
公共虚拟用户FromUser{get;set;}
//来自用户外键列
[外键(“FromUser”)]
public int FromUserId{get;set;}
[说明(“至”)]
公共虚拟用户ToUser{get;set;}
//ToUser外键列
[外键(“ToUser”)]
公共int ToUserId{get;set;}
}
ICollection
而不是IList
——这为我解决了许多问题也许我正在NHibernateIs中寻找类似MappedBy的东西。这个实体框架是什么?您想要简单的一对多映射还是更具体的映射?nhibernate标记,您会问这是否是EF?也许你没有资格回答这个问题。我没有看到Nhibernate的标签。它没有显示质量,它显示我只是错过了阅读标签:)冷静。