Как заставить EF включать метод, генерирующий внутренние соединения?

Использование EF4. У меня возникла ситуация, когда запрос linq to EF с явными соединениями не будет работать из-за таблицы «многие ко многим». Я не собираюсь нарушать дизайн базы данных для соответствия EF, поэтому я хочу использовать метод включения. Тем не менее, кажется, что это всегда генерирует левые внешние соединения, и мне нужны внутренние соединения (простой context.Table1s.Include("Table2"), где таблицы 1-к-1 или 1-ко-многим продемонстрируют проблему).

Любой способ заставить внутренние соединения?


person dudeNumber4    schedule 11.08.2010    source источник
comment
О какой версии EF здесь идет речь?   -  person Robert Koritnik    schedule 11.08.2010


Ответы (2)


К сожалению, нет способа заставить EF генерировать запросы определенным образом.

Однако, когда вы добавляете 3 объекта, вы должны видеть только 2 из них в дизайнере, 3-й является «отношением». Так что, если у вас есть, например, сущности люди, книги и кредиты, вы должны видеть только людей и книги, и люди должны иметь свойство навигации с именем Books(), которое возвращает все книги, связанные (кредиты) с этим человеком.

И если вы хотите, вы также можете сделать .Include("Books") для этого свойства навигации.

person Fabian    schedule 11.08.2010

Вы можете контролировать это, написав лучший LINQ

Я задал очень похожий вопрос, который дал мне полезный ответ, который предоставил решение, поэтому я смог перевести запрос в внутреннее соединение, что значительно ускоряет время выполнения запроса. Особенно второе решение в принятом ответе - это то, которое я использовал впоследствии, потому что я действительно не хотел использовать eSQL, так как мне не очень нравятся магические строки. Это вернет меня на 10 лет назад.

person Robert Koritnik    schedule 11.08.2010
comment
Конечно, если вы пишете запрос по-другому, но нет свойства с именем .UseInnerJoinsOnly, для которого вы можете установить значение true: P - person Fabian; 11.08.2010
comment
@Fabian: я думаю, что эффективное написание LINQ такое же, как эффективное написание другого кода. Итак, чтобы написать хороший LINQ, вам нужно изучить его глубже. То же самое касается HTML, CSS, C#, T-SQL и т. д. Если вы знаете технологию, вы сможете писать более качественный код. LINQ — это не просто универсальный магазин инструментов, где продаются универсальные молотки и отвертки. Это обычный магазин инструментов, в котором продаются разные инструменты для разных целей. И вы должны знать, что вы делаете, чтобы купить себе наиболее подходящий инструмент. - person Robert Koritnik; 11.08.2010
comment
Ответ на этот другой вопрос использует linq to EF, который я не могу использовать в своей ситуации. И (как вы говорите) я не хочу использовать eSQL. - person dudeNumber4; 11.08.2010