Entity Framework 4.0 2 многие-ко-многим с одинаковыми объектами - PullRequest
1 голос
/ 03 января 2011

У меня есть 2 сущности (скажем, People и Books), которые имеют два отношения «многие ко многим».Я создал две разные таблицы ссылок - например, таблицы ссылок называются BooksCheckedOutByPeople и BooksOnHoldByPeople.

EF 4.0 правильно устанавливает две взаимосвязи.Он называет их что-то вроде PeopleBooks и PeopleBooks1.

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

Скажем, я создаю запрос к People и хочу получить Books для BooksCheckedOutByPeople, и поэтому мне нужно использовать отношение PeopleBooks.

Спасибо.

1 Ответ

0 голосов
/ 03 января 2011

Вы сможете переименовать «PeopleBooks» и «PeopleBooks1» в более информативные имена свойств, отредактировав модель, сгенерированную для вас EF.Что-то вроде «BooksOnHold» и «BooksCheckedOut».

В этот момент, когда вы пишете ваши запросы LINQ, просто ссылайтесь на нужные свойства навигации (как они называются).LINQ использует любые свойства, которые вы укажете, и Entity Framework должна сгенерировать уникальное свойство навигации для каждой коллекции.

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

Я только что запустил VS2010, чтобы скопировать вашу модель инемного покопаться.

Я вижу, что EF4 действительно сгенерировал два Навигационные свойства для Книги и Человека, называемые Люди и Люди1 и Книги и Книги1 (соответственно).

Если вы выберете любое из этих свойств навигации в браузере моделей и посмотрите на панель свойств, вы сможете увидеть, какая таблица связана с этой ассоциацией, и соответствующим образом переименовать свойство.Вот скриншот с моего ПК: screenshot

Вы можете видеть, что я выбрал свойство nav "People" для объекта "Book".В этом случае связь определяется с помощью BooksCheckedOutByPeople, поэтому я могу переименовать свойство в «PeopleCheckingOut» или что-то более полезное, чем «People».Когда я позже использую LINQ-to-Entities, я ссылаюсь на свойство PeopleCheckingOut, чтобы запросить эту коллекцию в любой конкретной Книге.

...