как использовать MySQL и MSSQL в приложении ASp.net с платформой Entity - PullRequest
3 голосов
/ 23 декабря 2011

Я написал приложение ASp.net C # .NET 4.0 и использовал Ms SQL2008 DB.

Это двухуровневое приложение ... BLL / DAL и пользовательский интерфейс

Я использовал
- таблицы (с несколькими индексами, чтобы сделать запись уникальной)
- отношения между таблицами (отношение 1 к m)
- Entity Framework для Datamodel
- LINQ (обновить / вставить / выбрать / удалить)

Я не использовал
- Storedprocedures
- Просмотров
- Tsql
- нет ручной операции SQL
- и т. д.

Так что, если вы видите, это очень легко настроить. Приложение использует MsSQL2008 DB

поэтому мой вопрос: мне нужно использовать MySQL (запрос клиента).

Что мне нужно сделать? Так как я использовал Entitiy Framework, я думаю, что это должно быть легко сделано правильно?

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

пожалуйста, совет?

Ответы [ 2 ]

3 голосов
/ 23 декабря 2011

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. в следующий раз узнайте, какой клиент БД требует, прежде чем разрабатывать приложение. Это реальный анализ / требование провала разработки приложения для платформы, которую клиент не поддерживает.

1 голос
/ 23 декабря 2011

Вы можете установить соединитель Mysql .Net , и в своем файле EDMX вы можете выбрать Шаблон генерации DDL = SSDLToMySQL.tt (VS)

Это будет генерировать код SQL на основеMysql.

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