【问题标题】:The entity type ApplicationUser is not part of the model for the current context. Updated EDMX实体类型 ApplicationUser 不是当前上下文模型的一部分。更新了 EDMX
【发布时间】:2017-05-22 20:02:50
【问题描述】:

我正在使用 DB First 和 EF.. 我的数据库已经存在,所以我关注了 this post.. 特别是臭名昭著的答案。

我已将这些表编写到我现有的数据库中。

所以现在在我的web.config 我有这个:

  <connectionStrings>
    <!--<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-test-20170522025552.mdf;Initial Catalog=aspnet-test-20170522025552;Integrated Security=True" providerName="System.Data.SqlClient" />-->
  <add name="FakeExistingDBConnectionString" connectionString="xxxxxxxxxxxxxxx;user id=fake_user;password=fakeUser12;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
    </connectionStrings>
  <appSettings>

因此,创建此应用时附带的初始连接字符串 DefaultConnection 现在已被注释掉。

在我的 IdenityModel.cs 我现在有这个:

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

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }
}

当我尝试注册用户时.. 我明白了:

实体类型 ApplicationUser 不是当前上下文模型的一部分。

要明确一点.. 我现有的数据库确实包含 aspnetrolesaspnetuserclaimsaspnetuserloginsaspnetuserrolesaspnetusers 表。

我该如何解决这个问题?

更新

整个连接字符串:

<add name="DatabaseNameEntities" connectionString="metadata=res://*/Models.EntityDataModelName.csdl|res://*/Models.EntityDataModelName.ssdl|res://*/Models.EntityDataModelName.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=serverName;initial catalog=databaseName;user id=fake_user;password=fakePassword;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

更新 2

将此连接字符串添加到 web.config:

<add name="NameConnString" connectionString="data source=serverName;initial catalog=databaseName;user id=fake_user;password=fakePassword;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />

然后在我的 IdentityModel 中..

public ApplicationDbContext()
    : base("NameConnString", throwIfV1Schema: false)
{
}

【问题讨论】:

  • 确保通过右键单击更新您的 EDMX。否则,请参阅here
  • @SteveGreene 我已经从数据库中更新了我的 EDMX,但仍然出现同样的错误。

标签: c# asp.net-mvc entity-framework


【解决方案1】:

假设这是您的 EF EDMX 连接字符串:

<add name="FakeExistingDBConnectionString" connectionString="xxxxxxxxxxxxxxx;user id=fake_user;password=fakeUser12;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

上面的连接字符串最有可能触发问题,因为生成的连接字符串使用EntityClient 而不是EF 要求与数据源通信的SqlClient 提供程序。请注意,您需要包含标准 SQL Server connection string,以创建 ASP .NET 身份表的数据库为目标。

因此,您的数据库连接字符串的正确设置应如下所示:

<connectionStrings>
    <add name="FakeExistingDBConnectionString" connectionString="xxxxxxxxxxxxxxx;user id=fake_user;password=fakeUser12;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
</connectionStrings>

EDMX 的另一个连接字符串:

<connectionStrings>       
    <add name="FakeExistingDBConnectionEntities" connectionString="metadata=res://*/Models.ModelName.csdl|res://*/Models.ModelName.ssdl|res://*/Models.ModelName.msl;provider=System.Data.SqlClient;provider connection string=&quot;xxxxxxxxxxxxxxx;user id=fake_user;password=fakeUser12;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
</connectionStrings>

另外,ApplicationDbContext 中引用的连接字符串应该引用SqlClient 提供者连接字符串:

public ApplicationDbContext()
    : base("FakeExistingDBConnectionString", throwIfV1Schema: false)
{
}

然后,更新 EDMX 并确保您可以管理用户(创建、登录、更新、密码重置等)

类似问题:

ASP.NET/Identity Error: The entity type ApplicationUser is not part of the model for the current context

The entity type ApplicationUser is not part of the model for the current context, DB First with custom user store

【讨论】:

  • 所以我只需要添加一个没有 EF 的额外连接字符串?查看我的更新
  • 解释得很好。谢谢@Tetsuya Yamamoto
猜你喜欢
  • 2017-06-19
  • 2016-08-31
  • 1970-01-01
  • 2014-04-30
  • 1970-01-01
  • 1970-01-01
  • 2015-07-08
相关资源
最近更新 更多