在身份上下文中启用自动迁移

时间:2014-04-10 13:43:34

标签: c# entity-framework asp.net-mvc-5 code-first ef-migrations

我正在使用.NET MVC 5来创建应用程序。我正在使用代码第一种方法。我有一个单独的程序集来放置我的数据库类,并在不同的迁移文件夹中分隔我的上下文。到目前为止,我有2个上下文,其中一个是IdentityDb,它继承自IdentityDbContext。 到现在为止还挺好。但是当我尝试启用自动迁移时(因为我仍然没有生产版本并且自动迁移不会受到影响),IdentityDb会发生一些不好的事情。这就是我启用自动迁移的方式:

public class IdentityDb : IdentityDbContext<ApplicationUser>
{
    public IdentityDb() : base("DefaultConnection")
    {
        Database.SetInitializer(new MigrateDatabaseToLatestVersion<IdentityDb, Configuration>("DefaultConnection"));
    }
}

当然我有Configuration类,种子方法和Aut​​omaticMigrationsEnabled属性设置为true。一切似乎都很好,但是当我尝试做一些需要身份上下文(例如登录)的事情时,我收到此错误消息:

The ConnectionString property has not been initialized

它说错误的行是:

public IdentityDb() : base("DefaultConnection")

但确实如此。我假设当我在基础构造函数中将其作为“DefaultConnection”传递时,并且在实例化MigrateDatabaseToLatestVersion时,会设置连接字符串。

最后,我想说这只发生在IdentityDb上下文中。我在其他上下文中启用了自动迁移,CampaignignsDb,完全相同,并且运行正常。有没有人知道IdentityDb发生了什么?问题是因为这个类继承了IdentityDbContext,并且应该使用不同的方法启用自动迁移吗?

提前致谢!

1 个答案:

答案 0 :(得分:2)

"DefaultConnection"移除MigrateDatabaseToLatestVersion。您已经传入了配置类型,而后者应该使用您的DBContext。所以它会是这样的:

Database.SetInitializer(new MigrateDatabaseToLatestVersion<IdentityDb, Configuration>());