Я использую Контекст .NET MySQL с Entity Framework 4, и все отлично поработало, но я хотел упаковать файлы DLL клиента MySQL с моим приложением при развертывании на серверах, поэтому нам не нужно беспокоиться об установке mysql on каждый сервер, каждое приложение будет иметь только нужную копию.
Чтобы сделать это возможным, я убедился, что ссылки 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 на удаленном сервере, но теперь у меня есть проблема на моей локальной машине dev (где у меня есть установленный соединитель MySQL), и я получаю эту ошибку когда EF пытается подключиться:
Столбец "InvariantName" ограничен уникальным. Стоимость "MySql.Data.MySqlClient" уже присутствует.
Если я прокомментирую XML, добавленный выше в app.config, ошибка исчезнет. Вероятно, это связано с тем, что один и тот же драйвер установлен в системе и находится в файле machine.config.
Какое решение? Я бы предпочел не комментировать и раскомментировать строку в зависимости от того, для какой системы я создаю приложение.