Соотношение «многие ко многим» вставляет и удаляет - PullRequest
0 голосов
/ 13 мая 2009

У меня есть лица

  • Пользователь:

ID

имя

навигация: группа

  • Группа:

ID

имя

навигация: пользователь

соотношение:

  • usrgrp

iduser

idgroup

Здесь я не хочу добавлять данные в отношение, а не в основные объекты. Пожалуйста, дайте мне пример как удалить и вставить в usrgrp.

Заранее спасибо. s.

Ответы [ 2 ]

1 голос
/ 13 мая 2009

Крейг прав, потому что таблица usrgrp имеет только 2 FK, это чистая таблица соединений, и поэтому Entity Framework интерпретирует это как ассоциацию ManyToMany.

Как показывают примеры кода, приведенные выше Крэйгом, это обычно хорошо для большинства клиентов.

Однако, если вы хотите независимо управлять отношениями UserGroup, один из вариантов - добавить дополнительный столбец в таблицу usrgrp, поэтому столбец Identity, вероятно, проще всего. В этом случае Entity Framework больше не может свернуть эту таблицу просто в навигацию, поэтому вы увидите Entity для таблицы usrgrp, которой вы можете управлять независимо.

т.е.

someUser.UserGroups.Add(new UserGroup {User = someUser, Group = someGroup});

Обратите внимание, что вам не нужно указывать столбец Identity (что было бы проблематично), поскольку он создается в хранилище.

Как правило, большинство клиентов предпочитают не видеть сущность для таблиц с чистым соединением, поскольку опыт программирования без нее проще. Например, запросы LINQ становятся немного сложнее:

это:

var users = from g in ctx.Groups
            from u in g.Users
            where g.Name == "Administrators"
            select u;

становится:

var users = from g in ctx.Groups
            from ug in g.UserGroups
            where g.Name == "Administrators"
            select ug.User;

Надеюсь, это дополнительное разъяснение поможет

Alex

1 голос
/ 13 мая 2009

Entity Framework собирается включить таблицу usrgrp в навигацию. Там не будет сущности для этого. Следовательно, весь доступ к этой таблице осуществляется только через сущности пользователя и группы. Поскольку это отношение многие ко многим, вы можете получить доступ к отношениям с любого конца практически одинаково.

someUser.Group.Add(new Group());
someUser.Group.Remove(someExistingGroup);
context.SaveChanges();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...