У меня есть схема базы данных:
User <-- UserRole --> Role
В таблице ролей есть несколько столбцов, но меня интересует только первичный ключ, и я могу получить его из внешнего ключа UserRole, чтобы мне вообще не нужно было присоединяться к таблице ролей, но я не могу выяснить, как избежать присоединения к этой таблице с помощью EF.
Я попробовал этот код:
context.Users.Where(u => u.UserId == x).Single().Roles.Select(r => r.RoleId);
Это генерирует два запроса. Один на пользовательской таблице и один на объединении UserRole и Role. Конечно, я могу сократить его до одного запроса, используя .Include ("Roles") или SelectMany (), но этот запрос объединит три таблицы. Есть ли способ избавиться от лишнего соединения? Я хочу, чтобы мой SQL был похож на это:
SELECT u.*, ur.RoleId
FROM User u
LEFT OUTER JOIN UserRole ur on ur.UserId = u.UserId
WHERE ...
На самом деле я использую automapper, но я думаю, что этот пример демонстрирует ту же проблему. Роли - это небольшая таблица, так что на этот раз я могу выдержать снижение производительности, но меня беспокоит, что я не могу получить ее так же эффективно, как рукописный SQL. Кто-нибудь еще сталкивался с этим до меня и нашел решение?