Получение Entity Framework для генерации SQL с идентификаторами backtick, ожидаемыми MySQL - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь сначала получить код Entity Framework для работы с существующей базой данных MySQL. Я получил Entity Framework v6.2.0 и MySQL.Data.Entity v6.9.11 от NuGet. Я пробовал MySQL.Data.Entity v6.10.7, но вернулся к 6.9.11 после того, как был заблокирован той же проблемой правил безопасности наследования , что и этот вопрос.

Конфигурация содержит следующее (имя пользователя и пароль удалены по понятным причинам):

  <connectionStrings>
    <add name="MySql" providerName="MySql.Data.MySqlClient" connectionString="SERVER=sql-dev;Database=pen;UID=****;PWD=****;Allow User Variables=True;" />
  </connectionStrings>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.11.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
  <system.data>
    <DbProviderFactories>
      <remove invariant="MySql.Data.MySqlClient" />
      <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.11.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
  </system.data> 

Вернувшись к v6.9.11, я дошел до того, что могу запросить DbSet и увидеть SQL, который он генерирует в отладчике. Я могу подключиться, и он распознает, что схема правильная, но когда я пытаюсь выполнить простой тестовый запрос, он не работает.

 Assert.IsTrue(context.BinLocs.Count() > 0);

Используя отладчик, я обнаружил, что он не работает, потому что запрос, который он генерирует SQL, использует синтаксис, оптимизированный для SQL Server, который не работает для MySQL.

SQL, который сгенерировал Entity Framework, был:

SELECT 
    [Extent1].[TID] AS [TID], 
    [Extent1].[zone] AS [zone], 
    [Extent1].[ProdCode] AS [ProdCode], 
    [Extent1].[chute] AS [chute]
FROM [dbo].[tbl_s_products_binlocs] AS [Extent1];

К сожалению, база данных настроена на использование `в качестве идентификаторов кавычек, и схемы dbo нет. Зная это, я легко могу заставить этот SQL работать, вручную изменив SQL, чтобы учесть это:

SELECT 
    `Extent1`.`TID` AS `TID`, 
    `Extent1`.`zone` AS `zone`, 
    `Extent1`.`ProdCode` AS `ProdCode`, 
    `Extent1`.`chute` AS `chute`
FROM `tbl_s_products_binlocs` AS `Extent1`;

Когда я запускаю этот SQL для базы данных, я получаю ожидаемые результаты. Я не могу изменить способ, которым база данных ожидает, что идентификаторы будут заключены в кавычки, потому что уже существуют устаревшие программы, которые должны продолжать работать и принимать этот синтаксис. Поэтому мне нужно получить Entity Framework для генерации SQL, который будет работать с существующей базой данных.

Как получить Entity Framework для генерации SQL с идентификаторами в кавычках, ожидаемыми MySQL?


Обновлено, чтобы включить параметры конфигурации

1 Ответ

0 голосов
/ 02 мая 2018

Вам необходимо настроить генератор Framework.

Подписаться это .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...