9

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

我今天(2014-4-15)更新了我项目的所有 NuGet 包。其中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 迁移。但我的项目是 Database First webforms 项目。我怎么解决这个问题?谢谢!


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

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

4

2 回答 2

15

您需要按照错误说明来禁用模式一致性。这是您从 1.0 版升级到 2.0 版时发生的一次性事情。

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

下一步 - 进行迁移。

之后一切都应该正常工作,您可以删除它throwIfV1Schema:false

您还可以查看以获取更多信息

于 2014-04-15T17:04:25.087 回答
0

问题在这里:

public class ApplicationUser : IdentityUser
{
}

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

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

于 2014-04-15T09:38:09.803 回答