Я использую Платформу Объекта с MySQL. Следующие результаты запроса ошибка:
var foobar = ctx.ArticleBase.OfType().Include("CreatedBy.Image.Location").ToList();
Ошибка: "ВНЕШНИЙ ПРИМЕНЯЮТСЯ, не поддерживается MySQL", я также добираюсь, "КРЕСТ ПРИМЕНЯЮТСЯ, не поддерживается MySQL" на небольшом другом запросе.
У меня есть следующая модель данных:
Кроме Изображения объект имеет объект Местоположения (один многим отношение) названный отношением Местоположения, и UserBase имеют отношение Изображения вместо UserSpecial.
Почему я получаю эту ошибку? Как избежать этой ошибки? Действительно ли это возможно?
Если эта ошибка исходит от MySQL, то произошло одно из двух:
Если эта ошибка исходит от провайдера MySQL EF, то произошло одно из двух:
SQL генерируется провайдером. Вы можете настроить генерацию SQL для конкретной версии сервера через атрибут ProviderManifestToken в EDMX. Таким образом вы указываете провайдеру не использовать возможности SQL, которые не поддерживаются старыми версиями сервера.
Возможно, что некоторые движки хранения MySQL поддерживают функции SQL, которые другие не поддерживают. В этом случае провайдер должен либо использовать общее подмножество функций, поддерживаемых большинством движков, либо использовать ProviderManifestToken
, чтобы дать вам возможность выбора.
Однако также возможно, что глючный провайдер просто возвращает некорректный SQL. Если это так, то вы должны либо найти обновление, либо избегать запросов, которые затрагивают ошибку.
Обновление: Основываясь на ответе @Devart, кажется, что это ограничение провайдера, которое было разработано из-за ограничений MySQL. EF будет создавать каноническое дерево команд ADO.NET. Ответственность за перевод его в SQL лежит на провайдере. Если EF возвращает узел cross/outer apply в CCT, похоже, что Devart не нашел способа перевести это в SQL, который MySQL может обработать. Так что либо MySQL просто не справляется с задачей поддержки всех запросов EF, либо кто-то, кто является экспертом по MySQL (не я!), должен показать Devart, как создать MySQL-совместимый SQL, который может правильно возвращать строки для перекрестных/внешних узлов CCT.
Это функция внутренней архитектуры Entity Framework. Иногда он генерирует запросы, не поддерживаемые другими поставщиками, кроме SQL Server. Дополнительная информация доступна здесь, в MSDN .