Отображение таблицы соединений на себя - PullRequest
0 голосов
/ 26 февраля 2012

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

Соединительная таблица:

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 Ответ

1 голос
/ 27 февраля 2012

если в ссылке нет дополнительных столбцов, я бы вырезал

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

    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...