Как создать и обновить отношение «многие ко многим» с помощью EF

Я использую Entity Framework с SQL Server. У меня есть отношения «многие ко многим» между двумя таблицами. Я создал таблицу соединений только с полями первичного ключа двух таблиц. В конструкторе две таблицы теперь имеют свойство перехода к другой с возвращаемыми типами Collection of X, где X — другой объект. Пока все так, как должно быть. Настройка выглядит правильно.

Task           TaskProducts     Product
==========     ============     =======
TaskID         TaskID           ProductID
Description    ProductID        Name

Не каждая задача будет иметь продукт или продукты, связанные с ней. Что назначить свойству навигации «Продукты» таблицы «Задача», если для этой задачи нет связанного продукта?

Нужно ли создавать коллекцию EntityCollection с сущностями Product и назначать ее свойству навигации Products в сущности Task, если у меня есть сущности Product?

При выполнении обновлений (добавление, удаление и изменение) свойства навигации «Продукты» в объекте «Задача» я работаю с ним, как с любой другой коллекцией? Есть ли какие-то особые вещи, на которые стоит обратить внимание?

Я был бы заинтересован в любой помощи в работе со многими отношениями в Entity Framework.

Edit(17/11/2009)
Одна вещь, которую я узнал, заключается в том, что для работы отношений многие ко многим с таблицей соединения ОБА поля в таблице соединения должны быть помечены как первичные ключи;


person DaveB    schedule 13.11.2009    source источник


Ответы (1)


В MSDN есть хорошая документация по управлению отношениями «многие ко многим» в Entity Framework:

http://msdn.microsoft.com/en-us/library/bb738695.aspx

Предписывающее руководство для вставок состоит в том, чтобы вызвать метод "Добавить" для коллекции сущностей и указать связанный объект (вместо установки свойства Value в ссылке на сущность для отношения "один ко многим").

Обновления обрабатываются так же, как и любое другое обновление EF... загрузите нужный объект, задайте измененные свойства и вызовите SaveChanges в контексте.

Удаления обрабатываются так же, вызовите DeleteObject в контексте, а затем SaveChanges.

person mkedobbs    schedule 14.11.2009
comment
Хотя в этом связанном документе конкретно не рассматриваются отношения «многие ко многим», они упоминаются, и информация полезна. Очень приятно, что вы можете работать с коллекцией и не беспокоиться об управлении таблицей соединений. - person DaveB; 17.11.2009