Миграция на MySQL и указанные схемы недействительны

Я перенес базу данных SQL2012 в MySQL, за исключением одной проблемы.

Я получаю следующую ошибку при подключении к базе данных MySQL.

Исключение произошло при инициализации базы данных.

InnerException для деталей: указанная схема недействительна. Ошибки: (0,0): ошибка 0040: Тип nvarchar(max) не соответствует пространству имен или псевдониму. Без уточнения можно использовать только примитивные типы.

Это происходит для каждого свойства String в моих классах.

Я пробовал следующее:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
        { modelBuilder.HasDefaultSchema(String.Empty);}

Однако я все еще получаю сообщение об ошибке.

У кого-нибудь есть предложения, которые могут решить проблему.

Я также пытался создать миграцию MySQL, но получаю следующую ошибку:

No Entity Framework provider found for the ADO.NET provider with invariant name 'MySql.Data.MySqlClient'. Make sure the provider is registered in the 'entityFramework' section of the application config file. See http://go.microsoft.com/fwlink/?LinkId=260882 for more information.

Есть ли способ установить MySQLProvider в коде?

Вот моя конфигурация БД:

    public class EF6MySQLDbConfiguration : DbConfiguration
  {
    public EF6MySQLDbConfiguration()
    {
      if (CustomConnectionFactory.ServerName == "MySQL")
      {
        SetExecutionStrategy(MySql.Data.Entity.MySqlProviderInvariantName.ProviderName, () => new MySql.Data.Entity.MySqlExecutionStrategy());
        AddDependencyResolver(new MySql.Data.Entity.MySqlDependencyResolver());
        //Type t = typeof(MySqlProviderServices);
      }
      SetDefaultConnectionFactory(new CustomConnectionFactory());
    }

Чтобы решить проблему при переносе таблицы истории, я добавил:

public Configuration()
    {
        AutomaticMigrationsEnabled = false;

        if (EF6MySQL.DataAccess.CustomConnectionFactory.ServerName == "MySQL")
        {
          SetSqlGenerator("MySql.Data.MySqlClient", new MySql.Data.Entity.MySqlMigrationSqlGenerator());
          SetHistoryContextFactory("MySql.Data.MySqlClient", (conn, schema) => new MySql.Data.Entity.MySqlHistoryContext(conn, schema)); 
        }
    }

person RentUrApp    schedule 15.12.2014    source источник
comment
Пожалуйста, объясните немного больше, как выглядела ваша исходная модель и как вы ее мигрировали. В зависимости от того, что именно вы делаете, возможно, вам потребуется обновить модель для нового типа базы данных.   -  person JotaBe    schedule 16.12.2014
comment
Модель была создана с помощью Code First from Classes и Add-Migration в консоли диспетчера пакетов. Первоначально я ориентировался на SQL2012 для создания миграции. MySQL автоматически переводит nvarchar(max) в длинный текст. Мне нужна гибкость, чтобы иметь возможность запускать любую базу данных.   -  person RentUrApp    schedule 16.12.2014
comment
Извините, я до сих пор не понимаю, пытаетесь ли вы создать новую базу данных MySQL, из миграции SQL Server или что-то еще. Пожалуйста, будьте более конкретными, так что вы уже сделали и что вы пытаетесь сделать гораздо более четким образом. Я не могу понять настоящую проблему. Пожалуйста, отредактируйте свой вопрос и добавьте всю возможную информацию. Понятно, что вы используете генератор sql-миграции sql-сервера для базы данных MySQL, но я не знаю, почему, не видя вашей конфигурации и кода.   -  person JotaBe    schedule 17.12.2014
comment
У меня уже есть созданные миграции, и я просто хочу переключиться на MySQL в качестве пользовательской настройки в коде.   -  person RentUrApp    schedule 18.12.2014


Ответы (1)


Решение состоит в том, чтобы добавить следующую строку:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
  if (CustomConnectionFactory.ServerName == "MySQL")
  {
    modelBuilder.Properties<String>().Configure(c => c.HasColumnType("longtext"));
  }}

Второй ответ, представленный здесь, содержал бесценную информацию. для настройки двух разных баз данных.

person RentUrApp    schedule 31.12.2014