2012-07-01 100 views
3

我使用的是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-表如下所示:

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

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

所以我希望有一个映射,而该人的关系被加载,不管实际的人作为Person1Id或Person2Id引用。

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

感谢您的帮助, 科瑞

+0

您是否已经在PersonMap类中尝试了HasManyToMany(x => x.Relations)? – rumpelstiefel

回答

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); } 
} 

(我假设你知道该怎么做的第一部分,让我知道,如果你不要)

+0

NHibernatw能否检查这两列,例如,如果我想加载Person与Id 2的关系,因为它可以在Person1Id或Person2Id列中拥有自己的Id? –