【问题标题】:ASP.NET Identity Framework ApplicationUser is not part of the modelASP.NET Identity Framework ApplicationUser 不是模型的一部分
【发布时间】:2015-12-07 10:18:53
【问题描述】:

我正在为我的问题寻找解决方案,但没有找到适合我的情况。

我有两个项目应该链接在一起。其中一个是数据库,另一个是使用身份框架的 ASP.NET MVC 项目。

为了使用我自己的数据库,我写了:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("MyDataSource", throwIfV1Schema: false)
    {
    }

    [...]
}

但我收到错误消息: 实体类型 ApplicationUser 不是当前上下文模型的一部分。

我在这里找到的解决方案是指从 IdentityDbContext 继承 ApplicationDbContext 但这显然对我不起作用。

【问题讨论】:

    标签: c# asp.net asp.net-mvc connection-string


    【解决方案1】:

    这是一个非常普遍的错误。 如果您使用的是模型优先或数据库优先,请检查您的连接字符串以及它是否由 EF 自动生成,如下所示:

    <add name="MyDataSource" connectionString="metadata=res://*/Models.***.csdl|res://*/Models.***.ssdl|res://*/M‌​odels.***.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=(localdb)\ProjectsV12;Initial Catalog=DB_Projectname;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFramework&quot;" providerName="System.Data.EntityClient" />
    

    然后改成:

    <add name="MyDataSource" connectionString="Data Source=(localdb)\ProjectsV12;Initial Catalog=DB_Projectname;Integrated Security=True;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" />
    

    是的,只需删除模型元数据并将提供程序名称更改为 System.Data.SqlClient。

    另外,请确保 Identity 连接正确。您可以创建一个空的 asp.net mvc 项目并将 Startup.cs 和 Startup.Auth.cs 与您的应用程序进行比较。

    【讨论】:

    • 实际上我无法在我的 Startup.Auth.cs 中声明 UserManagerFactory,因为 VS 没有导入必要的命名空间。还是我需要手动实现它? UserManagerFactory 需要哪些命名空间?
    • 你可能有这样的代码:app.CreatePerOwinContext&lt;ApplicationUserManager&gt;(ApplicationUserManager.Create); 而在 Create 方法中是这样的:var manager = new ApplicationUserManager(new UserStore&lt;ApplicationUser&gt;()); 只需添加 db context tp 这一行:var manager = new ApplicationUserManager(new UserStore&lt;ApplicationUser&gt;(context.Get&lt;ApplicationDbContext&gt;()));
    • 另外,我在这里为 UserManager 添加了一个示例:gist.github.com/Vadimyan/9dae23f8051ea37a50f7 正如您在第 148 行中看到的那样,我们使用 ApplicationUserManager 而不是 DbContext 来操作用户实体。
    • 我实际上就是以这种方式使用管理器的上下文。
    • 好的,哪一行代码抛出了这个异常?您的数据库中有用户表吗?请给我看看你的connectionString。
    猜你喜欢
    • 2014-04-30
    • 1970-01-01
    • 2016-08-31
    • 2015-07-08
    • 1970-01-01
    • 2014-03-10
    • 1970-01-01
    • 2019-01-31
    • 2017-06-19
    相关资源
    最近更新 更多