我有点迷失如何让实体框架与自动迁移一起工作。我想:
- 数据库不存在时自动创建
- 模型更改时要自动更新的数据库
对于后者,我使用的是 DbMigrator。它相当慢,所以我不想在每个请求都运行它,而且我在同一个应用程序中有多个数据库,所以它不能进入 Application_Start 这就是为什么我把它放在 Session_Start 中,如下所示:
if (Session["started"] == null)
{
// this takes care of any database updates that might be necessary.
MigrationConfiguration configuration = new MigrationConfiguration();
DbMigrator migrator = new DbMigrator(configuration);
List<string> pm = migrator.GetPendingMigrations().ToList();
if (pm.Count > 0)
{
migrator.Update();
}
}
else
{
Session["started"] = "started";
}
不确定这是否是正确的方法,但它似乎有效,但是当它不存在时它实际上并没有生成数据库。它给了我一个“无法打开登录请求的数据库”db“”
我以前使用以下方法进行过此工作:
Database.SetInitializer<DbContext>(new InitializerIfModelChange());
这会删除数据库并生成种子数据,这在数据库不存在时很好,但它也可以在数据库更改时触发(在这种情况下,我希望 DbMigrator 处理它)这之前在 Application_Start 但我不确定怎么办。恐怕会和 DbMigrator 冲突。为了实现前面描述的两件事,我将如何设置这一切?