【问题标题】:Solution - The entity type ApplicationUser is not part of the model for the current context解决方案 - 实体类型 ApplicationUser 不是当前上下文模型的一部分
【发布时间】:2015-11-07 04:03:10
【问题描述】:

我将这个问题作为文档发布,因为我花了好几个小时才找到这个简单的问题。我正在使用 VS15 生成的原始 MVC 项目并尝试对其进行修改。

错误:[InvalidOperationException:实体类型 ApplicationUser 不是当前上下文模型的一部分。]

【问题讨论】:

    标签: c# ninject


    【解决方案1】:

    由于各种原因,您可能会收到此错误。这不是一个有保证的修复,但希望它会为那里的人节省一些时间。出现此错误通常是因为您的应用程序使用的是默认 DbContext 而不是您打算使用的。

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

    项目生成此自定义 DbContext。您应该确保“DefaultConnection”是连接字符串或使用此类的项目的 Web.config 中的连接名称。

    这是我的连接字符串。注意名称和上面 DbContext 中的名称是一样的:

    <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-AspnetIdentitySample-10_8_3;Integrated Security=True" providerName="System.Data.SqlClient" />
    

    一旦你确定你的连接字符串设置好了,我们需要检查 NinjectWebCommon 中的绑定。

    kernel.Bind<ApplicationDbContext>().ToSelf();
    kernel.Bind<IUserStore<ApplicationUser>>().To<UserStore<ApplicationUser>>().WithConstructorArgument("context", kernel.Get<ApplicationDbContext>());
    kernel.Bind<UserManager<ApplicationUser>>().ToSelf();
    

    这是我在应用程序中发现错误的地方。第一行不是必需的,但它是个好主意。第二行是最重要的。

    UserStore 有 2 个构造函数。第一个是空的。第二个有 1 个参数,DbContext 上下文。 Ninject 的构造函数参数区分大小写,并且必须命名为“context”,以便 Ninject 正确选择此构造函数。

    【讨论】:

    • Ninject 绑定为我节省了几天的调试时间。谢谢!
    • 感谢您发布此内容,遗憾的是我不得不花费数小时调试才能找到此内容。
    • 就是这样,谢谢。 @J3RM,我什至没有开始调试,就直接进入 google/stackoverflow :D
    • @somvru 请问NinjectWebCommon 在哪里?
    猜你喜欢
    • 2017-06-19
    • 2016-08-31
    • 1970-01-01
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    相关资源
    最近更新 更多