ASP.NET Identity 2.0 数据库优先方法:添加新列

ASP.NET Identity 2.0 DB First Approach: Adding new Columns

我正在尝试对现有数据库使用 ASP.NET Identity 2.0。 我已经创建了一个 MVC 项目(使用个人帐户身份验证),然后我注册了一个使用以创建数据库。

然后:

  1. 我为必要的 table 创建了脚本并将它们添加到我自己的数据库中
  2. 我添加了 ADO.NET 实体数据模型(首先是数据库),其中包括我的 table 加上身份 table。
  3. 我运行申请并注册了一个用户,一切正常。

现在,我需要添加与 AspNetUser table 的关系。

  1. 我在数据库中添加了具有关系的列 LocationId。
  2. 我向应用程序用户添加了以下内容Class:

    public virtual Region Region { get; set; }
    
  3. 然后,我更新了模型和 运行 应用程序,当我尝试注册新用户时,出现以下错误:

    AspNet UserLogin: EntityType: EntitySet 'AspNetUserLogins' is based on type 'AspNet UserLogin' that has no keys defined.

在这种情况下如何继续使用数据库优先方法?

Identity 使用 Code First 方法使 Identity System 尽可能多地进行自定义,并且您正在使用 DB first 方法进行公共数据访问。所以有两种上下文,一种是针对您的数据,另一种是针对您的身份。您需要编写 Identity classes 并通过在程序包管理器控制台中键入以下代码首先迁移身份上下文 class:

`启用迁移-ContextNameType [Your_Identity_Context]

这将为您的身份上下文类型启用代码优先迁移。如果要在用户 table 中添加区域 属性,则在 'ApplicationUser'(或从 IdentityUser 派生的任何 class)中添加所需的区域 属性,然后应用迁移更新数据库中的用户 table。

生成 SQL 脚本并应用到数据库不是一个好的方法。