解决方案 - 实体类型ApplicationUser不是当前上下文的模型的一部分

时间:2015-11-07 04:03:11

标签: c# ninject

我将这个问题作为文档发布,因为我花了很多时间才找到这个简单的问题。我正在接受VS15生成的原始MVC项目并尝试修改它。

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

1 个答案:

答案 0 :(得分:8)

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

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

该项目生成此自定义DbContext。你应该确保&#34; DefaultConnection&#34;是使用此类的项目的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的构造函数参数区分大小写,必须命名为&#34; context&#34;为Ninject正确选择此构造函数。