1. Em Package Manager Console, atualizar o EntityFramework:

update-package EntityFramework

Obs 1: Repetir processo se pedir pra reiniciar o VS afim de evitar problemas.
Obs 2: Caso necessário forçar a reinstalação usar:

update-package -reinstall entityframework

2. Em Package Manager Console, instalar os pacotes do MySql:

install-package MySql.Data.Entity

3. No arquivo Web.config remover o provider System.Data.SqlClient:

4. Trocar a connection string padrão do SQL Server por:

<add name="DefaultConnection" connectionString="server=localhost;user id=root;password=root;persist security info=True;database=dbname" providerName="MySql.Data.MySqlClient" />

5. Na pasta Models criar uma classe com nome no formato MyProjectNameContext com o seguinte código:

public class MyProjectNameContext : DbContext
    {
        public MyProjectNameContext() : base("DefaultConnection") { }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
        }
    }

6. Habilitar o Code First Migrarions com o seguinte código no Package Manager Console:

Enable-Migrations -ContextTypeName MyProjectNameContext -EnableAutomaticMigrations -Force

Obs: Retornará o seguinte erro: No MigrationSqlGenerator found for provider 'MySql.Data.MySqlClient'.

7. Na pasta Migrations, adicionar classe MySqlHistoryContext com seguinte código:

    public class MySqlHistoryContext : HistoryContext
    {
        public MySqlHistoryContext(DbConnection connection, string defaultSchema) : base(connection, defaultSchema) {}

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            modelBuilder.Entity<HistoryRow>().Property(h => h.MigrationId).HasMaxLength(100).IsRequired();
            modelBuilder.Entity<HistoryRow>().Property(h => h.ContextKey).HasMaxLength(200).IsRequired();
        }
    }

8. Na pasta Migrations, editar a classe Configuration e inserir o seguinte código no constructor:

    internal sealed class Configuration : DbMigrationsConfiguration<Models.ApplicationDbContext>
    {
        public Configuration()
        {
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = true;
ContextKey = "MyProjectName.Models.MyProjectNameContext";

            // register mysql code generator
            SetSqlGenerator("MySql.Data.MySqlClient", new MySqlMigrationSqlGenerator());

            SetHistoryContextFactory("MySql.Data.MySqlClient", (conn, schema) => new MySqlHistoryContext(conn, schema));
        }

        protected override void Seed(Models.ApplicationDbContext context) { }
    }

9. Na pasta raiz, adicionar classe MySqlInitializer.cs com o seguinte código:

public class MySqlInitializer : IDatabaseInitializer<ApplicationDbContext>
    {
        public void InitializeDatabase(ApplicationDbContext context)
        {
            if (!context.Database.Exists())
            {
                // if database did not exist before - create it
                context.Database.Create();
            }
            else
            {
                // query to check if MigrationHistory table is present in the database
                var migrationHistoryTableExists = ((IObjectContextAdapter)context).ObjectContext.ExecuteStoreQuery<int>(
                string.Format(
                  "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = '{0}' AND table_name = '__MigrationHistory'",
                  "dbname"));

                // if MigrationHistory table is not there (which is the case first time we run) - create it
                if (migrationHistoryTableExists.FirstOrDefault() == 0)
                {
                    context.Database.Delete();
                    context.Database.Create();
                }
            }
        }
    }

10. Editar o arquivo Global.asax e inserir no início do método Application_Start o seguinte código:

Database.SetInitializer(new MigrateDatabaseToLatestVersion<Models.ApplicationNameContext, Migrations.Configuration>());
Database.SetInitializer(new MySqlInitializer());

Comentários

Postagens mais visitadas