将联结表映射到自己

时间:2012-02-26 19:22:31

标签: c# nhibernate fluent-nhibernate

我正在努力使用引用同一个表的联结表的映射。我们的想法是能够跟踪页面之间的所有链接。

接合表:

CREATE TABLE WikiPageLinks (
    Page int NOT NULL, 
    LinkedPage int NOT NULL
)

主表:

CREATE TABLE WikiPages (
    Id int NOT NULL IDENTITY, 
    PageName nvarchar(50) NOT NULL, 
    Title nvarchar(50) NOT NULL, 
CONSTRAINT PK_WikiPages PRIMARY KEY (Id)
)

上课:

public class WikiPage
{
    public virtual int Id { get; protected set; }
    public virtual IEnumerable<WikiPageLink> BackReferences {get;}
    public virtual IEnumerable<WikiPageLink> References {get; }
}
  • BackReferences =当前页面为WikiPageLinks .LinkedPage
  • 参考文献=当前页面为WikiPageLinks.Page

映射应该如何?

1 个答案:

答案 0 :(得分:1)

如果链接中没有其他列,那么我会将其删除

public class WikiPage
{
    public virtual int Id { get; protected set; }
    public virtual IEnumerable<WikiPage> BackReferences { get; }
    public virtual IEnumerable<WikiPage> References { get; }
}

// WikiPageMap : ClassMap<WikiPage>
public WikiPageMap()
{
    ...
    HasManyToMany(wp => wp.References)
        .Table("WikiPageLinks")
        .ParentKeyColumn("parent_page_id")
        .ChildKeyColumn("referenced_page_id");

    HasManyToMany(wp => wp.BackReferences)
        .Table("WikiPageLinks")
        .ParentKeyColumn("referenced_page_id")
        .ChildKeyColumn("parent_page_id")
        .Inverse();

    ...
}