Asp.NET Identity IdentityUser 自定义属性导致运行时错误

Posted

技术标签:

【中文标题】Asp.NET Identity IdentityUser 自定义属性导致运行时错误【英文标题】:Asp.NET Identity IdentityUser Custom Properties Cause Runtime Error 【发布时间】:2014-05-17 20:46:49 【问题描述】:

我正在使用 VS2013 SPA 模板编写一个应用程序,其中包括 Asp.NET Identity、WebAPI2、KnockoutJS 和 SqlServer Express 2012。

我开始使用IdentityUser 类来处理我的用户,并且效果很好。我能够毫无问题地以用户身份添加和登录。然后我想向 IdentityUser 添加自定义信息(有一篇文章我再也找不到了)。

因此,我创建了一个继承自 IdentityUserUser 类,如下所示。

public class User : IdentityUser

    public string FirstName  get; set; 
    public string LastName  get; set; 

然后我将项目中的所有引用从IdentityUser 更新为User

现在,每当我尝试登录时,都会收到以下错误:

实体类型 User 不是当前上下文模型的一部分。

问题是,我有一个 DBInitializer (public class ApplicationDBInitializer : DropCreateDatabaseAlways<ApplicationDBContext>),它总是重新创建数据库并添加一些测试用户,然后创建表并成功添加用户。

如果不重要,这是我的 cxn 字符串:<add name="DefaultConnection" connectionString="Server=.\SQLEXPRESS;Database=ibcf;Trusted_Connection=True;" providerName="System.Data.SqlClient" />

还有我的 DBContext

public class ApplicationDBContext : IdentityDbContext<User>

    public ApplicationDBContext()
        : base("DefaultConnection")
    
    

为什么会出现这个错误?

【问题讨论】:

如果有帮助,请尝试检查:***.com/questions/20688922/… 我试过了,但是 User 应该映射到 AspNetUsers 并且通过手动执行它会导致弹出一个全新的错误。 分享你在ApplicationDBContext类中对OnModelCreating的实现,如果你有的话 【参考方案1】:

问题在于 Startup.Auth.cs 继续引用默认的 IdentityDbContext&lt;User&gt; DB 上下文。更新课程以引用我的ApplicationDBContext 后,问题已解决。

    static Startup()
    
        ...

        UserManagerFactory = () => new UserManager<User>(new UserStore<User>(new ApplicationDBContext()));

        ...
    

【讨论】:

以上是关于Asp.NET Identity IdentityUser 自定义属性导致运行时错误的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Identity系列教程Identity高级技术

ASP.NET MVC Identity 添加角色

[ASP.NET MVC] ASP.NET Identity登入技术剖析

使用 Identity Server 4 和 ASP.NET Identity 添加外部登录

ASP.NET Identity系列教程(目录)

ASP.NET Identity系列教程