отношение один ко многим в Entity Framework на одной и той же таблице - PullRequest
0 голосов
/ 19 декабря 2010

У меня есть две таблицы, в которых один пользователь может иметь несколько контактов:

User(UserId, UserName)
Contact(UserId, ContactId)

Предположим, я хотел бы получить все ContactNames из UserNames в пользовательской таблице по идентификатору пользователя.

Обратите внимание, что таблицу контактов нельзя увидеть в текущем контексте данных, она превратилась в отношение многие ко многим

Как выполнить запрос?

Что, если мне нужно вставить или удалить?

Я попробовал метод «включить», но он не работает.У вас есть предложения?

Большое спасибо.

1 Ответ

2 голосов
/ 19 декабря 2010
var id = 1; // id to find
context.Users
     .Where(x=>x.UserId = id)
     .SelectMany(x=>x.Users)
     .Select(x=>x.UserName)
     .ToArray();

alt text

После генерации из базы данных ваша модель имеет 2 вложенных коллекции: Users и Users1.

  1. Один из них соответствует пользователям, которые являются контактами для текущего пользователя.
  2. Другой хранит пользователей, для которых данный пользователь является контактом.

Вы можете переименовать их для представления их смысла в Контактах и ​​Контактах через редактора.

alt text

Если вы все еще хотите иметь 2 типа вместо Type + (ссылка «многие ко многим»), то в редакторе вы можете удалить ссылку, создать новую сущность «Контакт», настроить все сопоставления, добавить ссылки. После того, как все это сделано, модель будет выглядеть так: alt text

Чтобы достичь этого:

  1. Удалить ссылку "многие ко многим"
  2. Создать новый объект Contact
  3. Добавьте свойства ContactId и UserId, установите для StoreGeneratedPattern значение нет
  4. Добавить сопоставления для Contact
  5. Добавление ассоциаций для контактов и контактов для

Но это не так просто.

...