Запросите отношения многие ко многим с Entity Framework и .NET 3.5 - PullRequest
4 голосов
/ 26 марта 2011

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

На данный момент у меня есть очень упрощенная структура базы данных:

Post
===================
Id     Title
-------------------
 1     Hello world
 2     Foo bar baz

Tag
===================
Id     Title
-------------------
 6     test
 7     todo

PostTags
===================
PostId     TagId
-------------------
     1         6
     1         7
     2         7

Используя EF, она генерирует модельс двумя сущностями: Post и Tag .

Что я пытаюсь сделать:

Я пытаюсь запросить модель для всехсообщения с массивом tagIds (например, 6 и 7).Однако я не могу понять, что мне нужно сделать, чтобы сделать эту работу.Раньше я обманывал, добавляя автоинкрементную PK в таблицу сопоставления (BlogPosts) и добавлял ее в EF-модель, но это был скорее уродливый хак, чтобы двигаться вперед.Я бы лучше научился делать это правильно на этот раз.

1 Ответ

1 голос
/ 27 марта 2011

Это будет работать в EFv4.Попробуйте это в EFv1:

var tagIds = new int[] { 6, 7 };
var query = context.Tags
                   .Where(t => tagIds.Contains(t.Id))
                   .SelectMany(t => t.Posts);

Редактировать:

Я проверил это, и в EFv4 были добавлены оценочные параметры коллекции + Contains, поэтому приведенный выше пример не работает в EFv1. Эта тема на форуме MSDN предоставляет обходной путь для разрешения оператора IN в EFv1.Другой рекомендуемый обходной путь - это просто обновление до EFv4, потому что есть много других улучшений, включая значительное улучшение производительности.

...