3 способа много ко многим в Entity Framework - PullRequest
3 голосов
/ 10 ноября 2009

У меня есть 3 таблицы данных и четвертая таблица, которая отображается между ними, то есть 3 идентификатора со всеми тремя столбцами в качестве первичного ключа.

Что я действительно хочу, так это чтобы объект A содержал список, где B - это объект, содержащий список. Я бы согласился на двумерный массив B и C в A.

Есть ли способ сделать это? Я все об этом ошибаюсь?

Ответы [ 2 ]

1 голос
/ 10 ноября 2009

В типичном случае «многие ко многим», когда таблица объединения имеет только составной ключ (два поля первичного ключа), Entity Framework добавит свойства навигации непосредственно в связанные объекты. Однако, когда в соединительной таблице есть дополнительные поля, Entity Framework создает сущность для объединяемой таблицы, чтобы вы могли «получить» дополнительную информацию.

В случае, который вы описали выше, Entity Framework сгенерирует Entity для вашей таблицы "join", которая будет иметь ассоциации со всеми 3 вашими объектами.

Я создал пример, используя сущности Item1, Item2, Item3 и Link.

С точки зрения базы данных, если у меня есть идентификатор Item1, я могу запросить таблицу с чем-то вроде:

select Item1ID, Item2ID, Item3ID from Link where Item1ID = 1

Это даст мне список «пар» Item2, Item3, связанных с Item1 # 1. Используя Linq to Entities, я могу запросить модель EF аналогично, выполнив:

var q =
    from link in context.Link
    where link.Item1ID == 1
    select new { link.Item1, link.Item2, link.Item3 };

Или, если у меня уже есть объект Item1, для которого я хочу получить отношения:

item1.Link.Select(l => new { l.Item1, l.Item2, l.Item3 });

Это только основные примеры, но вы можете легко использовать методы расширения LINQ и IQueryable для преобразования / группировки данных по своему вкусу.

Если вы можете предоставить более подробную информацию о вашем деле, я мог бы привести вам более конкретные примеры. Надеюсь, это поможет!

Тим

0 голосов
/ 10 ноября 2009

Если я правильно понял ваш вопрос, вы говорите об отношениях между 3 типами сущностей. Давайте предположим, что этими объектами являются Книга, Автор и Издатель. В этом случае отношения

Книга <- многие ко многим -> Автор <- многие ко многим -> Издатель <- Книга </p>

Способ сопоставления этих отношений с моделью вашего домена зависит от того, как вы собираетесь перемещаться по графу объектов в вашем приложении.

Для 3 объектов существует 3 варианта:

а) Объектная книга содержит список авторов и список издателей. б) Автор объекта содержит список книг и список издателей. а) Object Publisher содержит список книг и список авторов

Некоторые отношения могут быть излишними с точки зрения вашего дизайна. Например, для случая б) будет достаточно вести список объекта «Книги в авторе» и список «Издателей в книге». По словам,

Автор [Книги] -> Книга [Издатели] -> Издатель

Возможны и другие случаи

Издатель [Книги] -> Книга [Авторы] -> Автор Издатель [Автор] -> Автор [Книги] -> Книга

Надеюсь, это поможет.

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