ВНЕШНИЙ ПРИМЕНЯЮТСЯ, не поддерживается MySQL

Я использую Платформу Объекта с MySQL. Следующие результаты запроса ошибка:

var foobar = ctx.ArticleBase.OfType().Include("CreatedBy.Image.Location").ToList();

Ошибка: "ВНЕШНИЙ ПРИМЕНЯЮТСЯ, не поддерживается MySQL", я также добираюсь, "КРЕСТ ПРИМЕНЯЮТСЯ, не поддерживается MySQL" на небольшом другом запросе.

У меня есть следующая модель данных: alt text

Кроме Изображения объект имеет объект Местоположения (один многим отношение) названный отношением Местоположения, и UserBase имеют отношение Изображения вместо UserSpecial.

Почему я получаю эту ошибку? Как избежать этой ошибки? Действительно ли это возможно?

5
задан Glorfindel 21 June 2019 в 22:04
поделиться

2 ответа

Если эта ошибка исходит от MySQL, то произошло одно из двух:

  1. Вы неправильно настроили провайдера.
  2. В вашем провайдере EF есть ошибка.

Если эта ошибка исходит от провайдера MySQL EF, то произошло одно из двух:

  1. Вы неправильно настроили провайдера.
  2. В вашем 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.

3
ответ дан 14 December 2019 в 13:34
поделиться

Это функция внутренней архитектуры Entity Framework. Иногда он генерирует запросы, не поддерживаемые другими поставщиками, кроме SQL Server. Дополнительная информация доступна здесь, в MSDN .

3
ответ дан 14 December 2019 в 13:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: