2012-02-26 2 views
0

Я борюсь с отображениями, которые используют таблицу соединений, которая ссылается на одну и ту же таблицу. Идея заключается в том, чтобы отслеживать все ссылки между страницами.Отображение таблицы переходов для себя

Junction стол:

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; } 
} 
  • обратные_связи = Текущая страница WikiPageLinks .LinkedPage
  • Литература = На данный момент is WikiPageLinks.Page

Как должно выглядеть сопоставление?

ответ

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

    ... 
} 
Смежные вопросы