NHibernate,简单的问题,额外的关联
本文关键字:关联 问题 NHibernate 简单 | 更新日期: 2023-09-27 17:53:14
我有一个问题一直困扰着我,而我博大精深的智慧就是无法理解它。案例:我想使用fluent nhibernate自动执行器和导出模式对同一个实体建立多个一对多关系。
我:
基类:
public abstract class Post<T> : Entity, IVotable, IHierarchy<T>
{
public virtual string Name
{
get; set;
}
public virtual string BodyText
{
get; set;
}
public virtual Member Author
{
get; set;
}
}
和继承类:
[Serializable]
public class WallPost : Post<WallPost>
{
public virtual Member Receiver
{
get; set;
}
}
WallPost的'Member'属性是该类的外键关系:
public class Member : Entity
{
public Member()
{
WallPosts = new IList<WallPost>();
}
public virtual IList<WallPost> WallPosts
{
get; set;
}
}
我希望你能陪我到现在。当我运行nhibernate的exportschema时,我希望得到一个带有'author_id'和'receiver_id'的表wallpost,但是我得到author_id, receiver_id,member_id。为什么Nhibernate框架添加member_id,如果它是用于收集帖子(IList),那么你如何指定它应该使用的外键关系来填充接收者,即成员。WallPosts将返回接收方的所有墙贴。
我希望我的回答是有意义的,如果你需要其他的回答,请告诉我,我会尽量提供的。
Thanks in advance
注。如果我将属性名称从'Receiver'更改为'Member',即公共虚拟Member Member,则只有两个关联而不是3个,author_id和member_id。
E对于这个问题的解决方案是添加一个覆盖:
mapping.HasMany(x => x.WallPosts).KeyColumn("Receiver_id");
最有可能的(我不使用自动映射,我更喜欢写我自己的classmaps),这是因为自动映射假设你的成员的"WallPosts"是由墙的帖子控制。因此,它为该关系创建了一个member_id。
编辑:尝试在您的fluent配置中添加覆盖,在AutoMap添加:
.Override<Member>(map =>
{
map.HasMany(x => x.WallPosts, "receiver_id")
.Inverse;
});