.NET MySQL, Connector, Конфликтующий DbProviderFactories - PullRequest
22 голосов
/ 09 сентября 2011

Я использую .NET MySQL Connector с Entity Framework 4, и все работало отлично, но я хотел упаковать клиентские DLL-файлы MySQL вместе с моим приложением при развертывании на серверах, поэтому нам не нужно беспокоиться об установке mysql накаждый сервер, каждое приложение будет иметь правильную копию, которая ему нужна.

Чтобы сделать это возможным, я убедился, что в ссылках MySQL установлен параметр «Копировать локально», чтобы они были скопированы в папки bin, и добавилпосле моего app.config:

<system.data>
    <DbProviderFactories>
      <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.3.7.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
</system.data>

Это работает, и я могу развернуть приложение без установки mysql на удаленном сервере, но теперь у меня проблема на моей локальной машине разработчика (где я do имеет установленный соединитель MySQL), и я получаю эту ошибку, когда EF пытается подключиться:

Столбец InvariantName ограничен, чтобы быть уникальным.Значение 'MySql.Data.MySqlClient' уже присутствует.

Если я закомментирую XML, который я добавил выше в app.config, ошибка исчезнет.Вероятно, это связано с тем, что один и тот же драйвер установлен в системе и находится в файле machine.config.

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

Ответы [ 2 ]

45 голосов
/ 09 сентября 2011

попробуйте добавить в вашу веб-конфигурацию.На вашем компьютере вы установили Connector for MySql, а ваш machine.config был изменен путем добавления элемента в DbProviderFactories.Поэтому, если вы добавите в свой web.config другой провайдер данных MySql, это похоже на попытку зарегистрировать одну и ту же вещь дважды.

<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.3.7.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
</system.data>
0 голосов
/ 25 марта 2014

Вы также можете скопировать все DLL-библиотеки mysql из C:\Program Files (x86)\MySQL\MySQL Connector Net 6.8.3\Assemblies\v4.0 в папку bin вашего проекта. Таким образом, EF6 может получить доступ ко всем необходимым подклассам коннектора MySQL (MySql.Data).

...