MigrateDatabaseToLatestVersion sem execução do método Seed ()
Estou tentando gerar automaticamente meu banco de dados se ele não existir e executar oSeed()
método para preencher os dados. No meu construtor Database Context, tenho o seguinte:
Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDBContext, Configuration>());
Isso funciona muito bem, meu banco de dados é criado automaticamente com todas as tabelas que eu quiser, mas parece que oSeed()
método não está sendo chamado, meu banco de dados está vazio. Esta é a minha turma:
internal sealed class Configuration : DbMigrationsConfiguration<Context.MyDBContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
}
protected override void Seed(Context.MyDBContext context)
{
context.Users.AddOrUpdate(
new Entities.User() { Email = "[email protected]", Password = "", Language = "en", CreatedDate = DateTime.Now }
);
base.Seed(context);
}
}
Quando eu corroUpdate-Database
noNuget
console, os dados são preenchidos após a criação do banco de dados, mas comMigrateDatabaseToLatestVersion
aSeed()
O método não é chamado.
O que pode estar acontecendo? Tentei executar migrações manualmente, conforme retirado deaqui:
var configuration = new MyDbContextConfiguration();
configuration.TargetDatabase = new DbConnectionInfo(
database.ConnectionString, database.ProviderName);
var migrator = new DbMigrator(configuration);
migrator.Update();
Mas também não funciona.
EDITAR:
Ok, depois de mais alguns testes, descobri que oSeed()
O método é executado, mas somente quando o banco de dados já existe, ou seja, na primeira execução, quando o banco de dados é criado pela primeira vez, oSeed()
O método não é executado, mas quando executo meu aplicativo pela segunda vezSeed()
é executado. Eu também tive que adicionarcontext.SaveChanges()
para que funcione (graças a @DavidG nos comentários):
protected override void Seed(Context.MyDBContext context)
{
context.Users.AddOrUpdate(
new Entities.User() { Email = "[email protected]", Password = "", Language = "en", CreatedDate = DateTime.Now }
);
context.SaveChanges();
base.Seed(context);
}
Talvez eu possa ligar manualmenteSeed()
dentroConfiguration()
e faça algumas verificações para evitar adicionar dados duplicados ou modificar dados que já existem.