当该关系具有属性本身时,如何将类映射到同一类的其他实例?
我有一个名为Person的类,它被映射到表Person
PersonID PersonName PersonAge ---------------------------------- 1 Dave Dee 55 2 Dozy 52 3 Beaky 45 4 Mick 55 5 Tich 58
我希望使用名为PersonPerson的连接表在Person和Person之间建立多对多关系:
PersonPersonID PersonID RelatedPersonID RelationshipID -------------------------------------------------------- 1 1 5 1 2 3 4 2 3 2 1 3
我想在PersonPerson表中使用以下属性:
RelationshipID RelationshipName -------------------------------- 1 Colleague 2 Manager 3 Tutor
这个问题和Billy McCafferty的链接帖子解释了由于PersonPerson表中的其他列,PersonPerson关系必须从正常的JOIN升级到实体本身.但是它没有解释什么时候它是自我加入.不同的是,如果我向Dave Dee(ID = 1)询问所有相关人员,我不仅应该得到Tich(ID = 5),而且我也应该得到Dozy(ID = 2),因为Dave Dee也在RelatedPersonID列中.
到目前为止,我的解决方案是在Person类中有两个属性.
public virtual IListPersonPersonForward {get;set;} public virtual IList PersonPersonBack {get;set;} private List personPersonAll; public virtual List PersonPersonAll { get { personPersonAll = new List (PersonPersonForward); personPersonAll.AddRange(PersonPersonBack); return personPersonAll; } }
并在hbm中有以下内容:
这看起来有点笨拙而且不够优雅.NHibernate通常为大多数日常问题提供优雅的解决方案.上述是明智的做法还是有更好的方法?