我有点失去了如何让实体框架与自动迁移一起工作。我想要:
对于后者,我正在使用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发生冲突。为了实现前面描述的两件事,我如何设置这一切?
答案 0 :(得分:1)
每当需要更改数据库时,我都会在包管理器中手动运行Update-Database
。最初我像你一样使用Database.SetInitializer
来创建数据库,但现在已将其注释掉了。
结帐Entity Framework 4.3 Automatic Migrations Walkthrough获取更多高级帮助。
这应该适用于你想要的东西,然后如果你需要创建一个新的数据库,只需像你一样添加Database.SetInitializer<NewDBContext>(new NewDBInitializer());
,构建并运行。然后将其注释掉,以便将来不会在模型更改中运行,而是在包管理器中使用Update-Database
命令。