Как вернуть только первый родительский элемент, но много дочерних элементов и внуков в Linq с Entity Framework - ошибка соединителя SYBASE ASE

У меня есть следующий оператор Linq:

car car = db.cars
              .Include("wheels")
              .Include("windows")
              .Where(c => c.id == id)
              .FirstOrDefault();

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

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


person trees_are_great    schedule 24.06.2015    source источник
comment
Вы уверены, что есть не только одно подходящее колесо и окно? Я только что сделал эквивалентный код около 5 минут назад, и он работал нормально. Какой SQL-запрос он создает?   -  person Jon Hanna    schedule 24.06.2015
comment
Спасибо за проверку. Я провел несколько тестов и тщательно выполнил их с помощью отладчика. Затем я пытаюсь выполнить удаление, и это не удается, если для автомобиля больше колеса из-за ошибки ограничения ссылки. Сейчас посмотрю SQL. Обратите внимание, что я использую Sybase Ase в качестве базы данных (ура!), так что это может быть ошибка с коннектором.   -  person trees_are_great    schedule 24.06.2015
comment
Я даже не проверял, у меня просто был такой же случай в моем собственном коде, но он использовал PostgreSQL через Npgsql.   -  person Jon Hanna    schedule 24.06.2015
comment
Ах да, я использую коннектор Sybase с Sybase ASE. К сожалению, я не смог найти сгенерированный для этого SQL. У меня нет профилировщика, может посмотреть на это.   -  person trees_are_great    schedule 24.06.2015
comment
Присваивая значения от Action<string> до db.Database.Log, которые регистрируют переданные строки, вы сможете увидеть сгенерированный таким образом SQL.   -  person Jon Hanna    schedule 24.06.2015
comment
Это поддерживается только EF6? Sybase-ase ограничен версией 4. Что-то из Entity Framework   -  person trees_are_great    schedule 24.06.2015
comment
Ах, увы, кажется, что Log действительно был добавлен с EF4. Позор, поскольку, как вы понимаете, в такие моменты это очень полезно.   -  person Jon Hanna    schedule 24.06.2015
comment
Могу себе представить... Я мечтаю о том дне, когда мой босс согласится с тем, что Sybase Ase необходимо заменить. Спасибо за вашу помощь в этом.   -  person trees_are_great    schedule 24.06.2015


Ответы (1)


Немного хака, чтобы обойти некоторые проблемы Sybase Ase при использовании с соединителем данных Sybase, но это работает:

var carSet = db.cars
              .Include("wheels")
              .Include("windows")
              .Where(c => c.id == id);

var car = carSet.FirstOrDefault();
person trees_are_great    schedule 24.06.2015