我将此问题作为文档发布,因为我花了很多时间才找到这个简单的问题.我正在接受VS15生成的原始MVC项目并尝试修改它.
错误:[InvalidOperationException:实体类型ApplicationUser不是当前上下文模型的一部分.]
出于各种原因,您可能会收到此错误.这不是一个保证修复,但希望它可以为那里的人节省一些时间.此错误通常会显示,因为您的应用程序使用的是默认的DbContext而不是您打算使用的DbContext.
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext() : base("DefaultConnection") {}
}
Run Code Online (Sandbox Code Playgroud)
该项目生成此自定义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" />
Run Code Online (Sandbox Code Playgroud)
确定连接字符串设置后,我们需要检查NinjectWebCommon中的绑定.
kernel.Bind<ApplicationDbContext>().ToSelf();
kernel.Bind<IUserStore<ApplicationUser>>().To<UserStore<ApplicationUser>>().WithConstructorArgument("context", kernel.Get<ApplicationDbContext>());
kernel.Bind<UserManager<ApplicationUser>>().ToSelf();
Run Code Online (Sandbox Code Playgroud)
这是我在我的应用程序中发现错误的地方.第一行不是必需的,但是一个好主意.第二行是最重要的.
UserStore有2个构造函数.第一个是空的.第二个有1个参数,DbContext上下文.Ninject的构造函数参数区分大小写,并且必须为Ninject命名为"context"才能正确选择此构造函数.