将ASP.NET Identity升级到2.0后的异常

时间:2014-04-15 09:24:49

标签: asp.net entity-framework asp.net-identity asp.net-identity-2

我的项目:VS2013,实体框架,Web表单,数据库优先,身份

我今天更新了我项目的所有NuGet包(2014-4-15)。其中,Identity升级到2.0.0.0。

我认为事情进展顺利,但不幸的是,当我运行应用程序时,以下语句给出了例外。

namespace xxx.Models
{
    // You can add User data for the user by adding more properties to your User class, please visit http://go.microsoft.com/fwlink/?LinkID=317594 to learn more.
    public class ApplicationUser : IdentityUser
    {
    }

    public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
        public ApplicationDbContext()
            : base("MyConnection") 
        {
        }
    }
...
}

异常信息如下。它要求我做Code First Migration。但我的项目是Database First webforms项目。我怎么解决这个问题?谢谢!


Microsoft.AspNet.Identity.EntityFramework.dll中出现“System.InvalidOperationException”类型的异常,但未在用户代码中处理

其他信息:自创建数据库以来,支持'ApplicationDbContext'上下文的模型已更改。 这可能是因为ASP.NET Identity Framework使用的模型已更改或应用程序中使用的模型已更改。 要解决此问题,您需要更新数据库。考虑使用Code First Migrations更新数据库(http://go.microsoft.com/fwlink/?LinkId=301867) 在使用“代码优先迁移”更新数据库之前,请通过在应用程序的ApplicationDbContext的构造函数中设置throwIfV1Schema = false来禁用ASP.NET身份的架构一致性检查。 public ApplicationDbContext():base(“ApplicationServices”,throwIfV1Schema:false)

2 个答案:

答案 0 :(得分:15)

您需要通过执行错误说明来禁用架构一致性。这是从1.0版升级到2.0时发生的一次。

public ApplicationDbContext() : base("MyConnection", throwIfV1Schema:false)

下一步 - 进行迁移。

之后一切都应该有效,您可以删除此throwIfV1Schema:false

您还可以查看this了解更多信息

答案 1 :(得分:0)

问题在于:

public class ApplicationUser : IdentityUser
{
}

我认为您应该更改为partial类以扩展实体框架中的实体。原因是EF将为每个实体生成代理类以连接到数据库。

partial类应该写在同一个命名空间中。