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

标签 c# ninject

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

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

最佳答案

由于各种原因,您可能会收到此错误。这不是一个有保证的修复,但希望它会为那里的人节省一些时间。出现此错误通常是因为您的应用程序使用的是默认 DbContext 而不是您打算使用的 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 中的绑定(bind)。
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 正确选择此构造函数。

关于c# - 解决方案 - 实体类型 ApplicationUser 不是当前上下文模型的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33578999/

相关文章:

c# - 需要帮助获得 Ninject 等同于 StructureMap 语法

c# - 如何将表格动态插入到另一个表格的表格单元格中?

c# - 解析小数并过滤右边多余的0?

c# - 将 SqlDecimal 转换为 Decimal 时出现 OverflowException

c# - 长期运行的 Windows 服务中的依赖注入(inject) - Composition root 是正确的想法吗?

ninject - 方法拦截,替换返回值

c# - 通过反射调用一个方法,没有得到TargetInvocationException

c# - 如何在不重复/复制相同数字的情况下生成随机数?

asp.net-mvc - 使用 Ninject 时如何处理 DBContext

Ninject 和 forwarded 类型(在 CaSTLe Windsor 中众所周知)