Отношения многие ко многим в определенном столбце для Entity Framework - PullRequest
0 голосов
/ 25 декабря 2011

У меня есть 3 таблицы: книга, раздел и содержание.Я хочу добавить отношение многие ко многим между Разделом и Контентом.Таблицы разделов и содержимого имеют столбец PageNo.Страница может иметь много содержимого и много разделов.Вкратце:

Book 1----* Section (on BookId)
Book 1----* Content (on BookId)
Section *-----* Content (on PageNo)

PageNo не уникален для таблиц разделов и содержимого.Поэтому я не могу добавить внешний ключ для PageNo в Sql Server.

Я попытался создать таблицу соединений следующим образом:

SectionContent: [SectionId, ContentId]

И я добавил FK для этой таблицы соединений.Таким образом, структура сущностей может понимать таблицу соединений и устанавливать отношения «многие ко многим» в SectionId и ContentId.Но каждый раз, когда мне нужно вставить один из Разделов или Таблицу содержимого, я должен также вставить в соединительную таблицу SectionContent.Итак, сначала я должен проверить, есть ли такая же запись уже в соединительной таблице.Также в проекте много операций вставки.Мне нужно искать все операции вставки и мне нужно добавить дополнительный запрос для вставки в таблицу соединений.

Также мне нужно получить разделы и содержимое на странице.Это дополнительные усилия для меня.

Я могу удалить связь между таблицами Section и Content.И я могу использовать дополнительные запросы на соединение в столбце PageNo.Но я хочу использовать сущность.Я хочу получить содержимое в виде объекта, например Section.Contents, и хочу получить разделы так же, как Content.Sections.

Так можно ли добавить связь «многие ко многим» между разделом и содержимым в столбце PageNo без ключей FK SQL Server?

Редактировать: Кроме того, если я использую приведенную выше таблицу соединений, я должен выполнить sqlзапрос, как это, я?

INSERT INTO SectionContent
SELECT * FROM 
(
    SELECT Section.id AS SectionId, Content.id AS ContentId
    FROM Section
    LEFT OUTER JOIN Content
        ON Section.PageNo = Content.PageNo AND 
           Section.BookId = Content.BookId 

    UNION

    SELECT Section.id AS SectionId, Content.id AS ContentId
    FROM Section
    RIGHT OUTER JOIN Content
        ON Section.PageNo = Content.PageNo AND 
           Section.BookId = Content.BookId 
) AS T
WHERE SectionId is not NULL AND ContentID is not NULL
GROUP BY T.SectionId, T.ContentId

1 Ответ

0 голосов
/ 30 марта 2012

Я решил эту проблему с помощью EF Code First.Я реализовал все таблицы как класс, а EF обработал все отношения «многие ко многим».

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