EF4 Как выставить таблицу соединений во многих отношениях - PullRequest
3 голосов
/ 14 марта 2011

Скажите, у меня есть следующие таблицы:

Essence, EssenceSet и Essence2EssenceSet, где Essence2EssenceSet содержит только идентификаторы первых 2-х таблиц для формирования отношения M: M.

В EF, поскольку Essence2EssenceSet не имеет других полей, он не отображается в модели. Я считаю, что это затрудняет вставку записей в эту таблицу, когда у меня уже есть 2 идентификатора, необходимые для создания записи, но необязательно загруженные записи Essence и EssenceSet (только их идентификаторы)

Есть ли способ сказать EF, чтобы он не моделировал таким образом и всегда включал таблицу соединений? Или я упускаю более простой способ создания этих записей таблицы соединений?

Ответы [ 2 ]

3 голосов
/ 15 марта 2011

Вы можете создать отношение M: N в EF без извлечения объектов:

using (var context = new MyContext())
{
   var firstEntity = new FirstEntity { Id = firstId };
   var secondEntity = new SecondEntity { Id = secondId; }

   context.FirstEntities.Attach(firstEntity);
   context.SecondEntities.Attach(secondEntity);

   firstEntity.SecondEntities = new HashSet<SecondEntity>();
   firstEntity.SecondEntities.Add(secondEntity);

   context.SaveChanges();
}

В любом случае раскрытие таблицы соединений в качестве сущности возможно, но вы потеряете комфорт EF и отступите от подхода, подобного SQL:

  1. Удалить отношение M: N, созданное дизайнером
  2. Добавить новую сущность
  3. Добавление двух столбцов к новому объекту, представляющих внешние ключи
  4. Сопоставить новый объект с соединительной таблицей
  5. Добавление ассоциаций к связанным объектам
  6. Установить ссылочные ограничения для добавленных отношений
0 голосов
/ 14 марта 2011

Entity Framework - это ORM, и поэтому при работе с ним вы не должны думать о базе данных в терминах таблиц, а вместо этого в терминах объектов.Вы не должны вставлять удостоверение в таблицу, которая содержит отношение M2M, но вы должны загружать одну сторону отношения, которая должна предоставлять коллекцию другой стороны и добавлять ее в эту коллекцию.Для M2M вам может потребоваться загрузить другую сторону и сделать то же самое.

Кроме того, я считаю, что EF предпочитает, чтобы все таблицы имели один столбец PK (я могу ошибаться в этом), но вам может понадобитьсядобавить столбец в M2M и обозначить его как PK.

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