在同一个表上映射多对多关系

时间:2012-07-01 12:53:43

标签: c# nhibernate fluent-nhibernate fluent-nhibernate-mapping

我正在使用nhibernate 3.3.1和fluent-nhibernate 1.3。我尝试用流利的方式映射以下实体:

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Person> Relations { get; set; }
}

如您所见,我的人与其他人有关系。所以我对DB-Table建模如下:

    | Persons
----+----------------------
 PK | Id int
    | Name nvarchar(100)

    | Relations
----+----------------------
 PK | Id int
 FK | Person1Id int
 FK | Person2Id int

所以我想要一个映射,无论实际的人是被引用为Person1Id还是Person2Id,都会加载人的关系。

这是否可以流利?如果没有,是否可以使用hbn.xml映射文件?

感谢您的帮助, 科拉伊

1 个答案:

答案 0 :(得分:0)

您无法直接将地图映射。您需要创建两个属性:

public virtual IList<Person> Relations1 { get; set; }
public virtual IList<Person> Relations2 { get; set; }

然后创建一个合并它们的投影属性:

public virtual IEnumerable<Person> Relations
{
    get { return Relations1.Concat(Relations2); }
}

(我假设你知道如何做第一部分;如果你不知道,请告诉我)