这是我的迁移和种子代码:
internal sealed class Configuration : DbMigrationsConfiguration<AuthDb>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
ContextKey = "Service.DAL.AuthDb";
}
}
public class CreateOrRunMigrations: CreateDatabaseIfNotExists<AuthDb>
{
public override void InitializeDatabase(AuthDb context)
{
base.InitializeDatabase(context);
var migrator = new DbMigrator(new Migrations.Configuration());
migrator.Update();
}
protected override void Seed(AuthDb context)
{
base.Seed(context);
// add Default product and company
}
}
上下文以这种方式构建
public class AuthDb : DbContext
{
public AuthDb() : base("name=xxx")
{
Database.SetInitializer(new CreateOrRunMigrations());
Configuration.LazyLoadingEnabled = false;
Configuration.ProxyCreationEnabled = false;
Configuration.AutoDetectChangesEnabled = true;
}
}
我想要的是:
首次创建数据库时,会添加种子数据。
当我在模型中进行更改时,迁移代码会自动将更改应用于数据库。
当我进行更改(例如公司)并使用update_database在控制台中添加迁移时,会创建迁移文件。但是当代码运行时,我收到一个错误,抱怨我的模型和数据库不再匹配。
当然它不匹配,因为我刚刚进行了更改,我希望迁移将应用更改。但事实并非如此。我做错了什么?
答案 0 :(得分:0)
您的初始化程序派生自CreateDatabaseIfNotExists,因此它只在数据库不存在时才会运行。尝试从MigrateDatabaseToLatestVersion派生它:
public class CreateOrRunMigrations: MigrateDatabaseToLatestVersion<AuthDb>
{
// no need for InitializeDatabase override since that's what this initializer does...
protected override void Seed(AuthDb context)
{
base.Seed(context);
// add Default product and company
}
}