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());
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
Postar um comentário