Использование MySql с Entity Framework 4 и Code-First Development CTP

Я подумал, что немного экспериментирую с последним сообщением Скотта Гатри о кодовом dev с Entity Framework 4. Вместо использования Sql Server я пытаюсь использовать MySql. Вот соответствующие части моего web.config (это приложение Asp.Net MVC 2):

        

Как и в учебнике, я ожидаю, что EF4 автоматически сгенерирует db для меня. Вместо этого он выдает исключение ProviderIncompatibleException, с внутренним исключением, жалующимся на то, что firebase database NerdDinners не существует.

Справедливо; Я пошел и создал MySql db для него, чтобы посмотреть, будут ли все работать, и вместо этого получилось другое ProviderIncompatibleException. На этот раз «DatabaseExists не поддерживается провайдером».

Я признаю, что это первый раз, когда я действительно вникаю в Entity Framework (я в основном привязывался к Linq to Sql), и все это работает на Code-First CTP, выпущенном только на прошлой неделе. Тем не менее, есть ли что-то, что я делаю неправильно здесь, или известная проблема, с которой можно работать?

Правильно, наконец, он работал с несколькими интересными моментами.

  • Невозможно создать БД, должен существовать уже
  • Вы должны создать строку соединения для каждого конкурса БД с использованием имени DBContext (в приведенном выше примере строка соединения должна существовать с именем «NerdDinners»), а не только по умолчанию (иначе она будет использовать SQL)
  • Он будет использовать имя используемого имени DBSet, чтобы определить ваш контекст как имя таблицы, поэтому будьте осторожны при их именовании.

В общем, длинная дорога, но там, в конце

** Обновление Еще один момент, который следует учитывать при развертывании вашего сайта MVC с использованием MySQL, вам больше всего хочется добавить DataFactory в ваш web.config. Обычно из-за различий в разъемах MySql и поддерживаемых версиях MySQL. (ответ найден через другие источники после большой царапины головы) Просто добавьте:

       

В качестве отдельного раздела к вашему web.config убедитесь, что вы установили номер версии MySQL.Data.dll, который вы развертываете с сайтом (также хорошая идея «скопировать как локальную» ваши библиотеки MySQL для обеспечения совместимости.

Еще один интересный вопрос: если вы добавите запись «Поставщик данных MySQL» на свой локальный файл machine.config (C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Config \ machine.config в моем случае), вы можете подключиться к вашему экземпляру MySql через Visual Studio …

Этот вопрос и ответ были очень полезны для меня, переносив большой проект EF с SQL на mySQL, поэтому я подумал, что добавлю свои заметки и надеюсь, что они будут полезны:

Как уже отмечалось, имя строки подключения должно совпадать с именем classа, которое расширяет System.Data.Entity.DbContext.

По-видимому, до сих пор нет возможности создавать таблицы в EF, используя соединитель mySQL, но вы можете использовать и изменять сценарии создания SQL для генерации таблиц mySQL. Самый простой способ, который я нашел для этого, – прокомментировать и отключить функцию OnModelCreating в расширенном DbContext в зависимости от того, нужен ли код для воссоздания таблиц. Если я нахожу, что я делаю это чаще, я планирую разрешить это, используя инъекцию зависимостей и иметь отдельные classы, основанные на конфигурации mySQL или MSSQL.

Мне было проще убедиться, что в блоках и серверах dev есть правильный соединитель mySQL .dll, упакованный в релиз, чем беспорядок с DbFactoryProviders в webconfig. Правильное использование упаковки в пакете сборки проекта / решения означало, что мне нужны строки строки подключения, а не линии DbFactoryProviders, которые, как мне показалось, трудно работать последовательно на нескольких машинах.

Мне нужно было изменить значение чувствительности к идентификатору mySQL с установкой, которая у меня была от 0 до 1. Без этого параметра SQL, который подключил EF, не смог найти таблицы, которые были там из-за смешанных имен имен моих объектов, по сравнению с фиксированными файлами что mySQL создает.

  • Вставка данных в таблицу с результатом другого запроса выбора
  • Настройка внешних ключей в phpMyAdmin?
  • Как просмотреть все foreign keys таблицы или столбца?
  • Каков наилучший способ переноса Django DB из SQLite в MySQL?
  • Когда использовать MongoDB или другие системы, ориентированные на документы?
  • Как я могу найти символы не ASCII в MySQL?
  • Несколько операторов select в одиночном запросе
  • Индекс MySQL Integer vs DateTime
  • MySQL: установка пользовательской переменной из результата запроса.
  • Как создать правильную строку подключения MySQL?
  • Как resize столбца в таблице mysql?
  • Interesting Posts

    Отсутствие предупреждений о файлах, появившихся после обновления до Xcode 4

    Как легко поднять при запуске файла .jar?

    Как полностью удалить диалоговое окно закрытия

    Сортировка списка с адаптером массива

    Код NSCocoaErrorDomain = 256

    Странное поведение NS в OS X – невозможно подключиться к SSH-серверу

    Является ли целостность флеш-памяти зависящей от системных ресурсов при чтении / записи (например, CD / DVD)?

    Ошибка «строка не удалось разрешить» в Eclipse для C ++ (Eclipse не может разрешить стандартную библиотеку)

    Экземпляр SSH на экземпляр эластичного бобового стежка

    Правильный способ перемещения объекта GameGbject

    Переполнение ключей в Mac OS X

    Вырезать – разделитель должен быть единственным символом

    как использовать htmlunit с моим проектом Android

    getlastknownlocation всегда возвращает null после того, как я переустановил файл apk через eclipse

    Как я могу выполнить большое количество различных find / replaces?

    Давайте будем гением компьютера.