EDMX файл состоит из трех частей:
- SSDL - описание базы данных. Эта часть содержит информацию об используемом сервере базы данных
- CSDL - описание ваших занятий
- MSL - описание отображения между артефактами SSDL и CSDL
Если вы хотите использовать несколько серверов баз данных, у вас должен быть как минимум отдельный SSDL для каждого из них (если вы собираетесь использовать разные имена таблиц или столбцов для базы данных, у вас также должен быть отдельный MSL).
Когда ваша библиотека скомпилирована, эти три части извлекаются в отдельные файлы и включаются в качестве ресурсов для вашей скомпилированной библиотеки DLL. Это те странные вещи, на которые ссылается строка подключения EF. Вы можете переключить генерацию в конструкторе EF , и эти файлы будут развернуты в вашем каталоге bin.
Проблема с поддержкой нескольких серверов баз данных заключается в том, что вам нужно несколько файлов SSDL. Конструктор VS и EF позволяет работать с SSDL только в EDMX, и каждый EDMX может иметь только один SSDL. Итак, ваши варианты поддержки нескольких БД:
- Отдельный EDMX для каждого сервера. Это создает действительно большие проблемы, потому что вы должны синхронизировать их, и вы должны убедиться, что CSDL-часть будет точно такой же.
- Один CSDL, один MSL, два SSDL в вашем проекте. Опять же, это действительно проблематично, потому что это означает наличие одного основного EDMX и отдельного SSDL (это файл XML), где вы снова будете поддерживать все описания БД.
- Только один сервер EDMX для MSSQL с артефактами, развернутыми в каталоге bin + отдельная постобработка, которая примет SSDL и автоматически создаст вторую для MySQL. Это самый лучший вариант. Вам необходимо обнаружить различия в используемых типах между MySQL и MSSQL (вы можете использовать трюк, описанный @ChristiaanV, чтобы найти эти различия, но не забудьте сделать резервную копию своего EDMX, потому что вам придется вернуть его), и написать пользовательское консольное приложение, скрипт или XSLT. преобразование, которое преобразует SSDL для MsSQL в SSDL для MySQL. Вы получите один CSDL, один MSL и два SSDL, где второй автоматически генерируется из первого.
Чтобы это работало во время выполнения, вам нужен поставщик MySQL для EF - например, коннектор, упомянутый @ChristaanV, и вы должны ссылаться на правильный SSDL в строке соединения для MSSQL и MySQL.
Btw. в следующий раз узнайте, какой клиент БД требует, прежде чем разрабатывать приложение. Это реальный анализ / требование провала разработки приложения для платформы, которую клиент не поддерживает.