【发布时间】:2011-04-26 12:09:24
【问题描述】:
我的这个问题一直困扰着我,而我庞大而深不可测的智慧就是无法理解它。案例:我想使用流畅的 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 的“成员”属性是与此类的外键关系:
public class Member : Entity
{
public Member()
{
WallPosts = new IList<WallPost>();
}
public virtual IList<WallPost> WallPosts
{
get; set;
}
}
我希望你和我在一起直到现在。当我运行 nhibernate 的导出模式时,我希望得到一个带有“author_id”和“receiver_id”的表墙贴,但我得到了 author_id、receiver_id、member_id。为什么 Nhibernate 框架添加 member_id,如果是用于帖子集合(IList),那么您如何指定它应该用来填充的外键关系是接收者,即 member.WallPosts 将返回接收者的所有墙贴。
我希望我是有道理的,如果您需要其他任何东西来回答这个问题,请告诉我,我会尽力提供。
提前致谢
附:如果我将属性名称从“Receiver”更改为“Member”,即 public virtual Member Member,则只会创建两个关联,而不是 3 个,author_id 和 member_id。
E
其他人对此问题的解决方案是添加一个覆盖:
mapping.HasMany(x => x.WallPosts).KeyColumn("Receiver_id");
【问题讨论】:
标签: c# asp.net database nhibernate orm