Я использую .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.
Какое решение?Я бы предпочел не комментировать вручную и не раскомментировать строку в зависимости от того, для какой системы я создаю приложение.