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

时间:2017-05-22 20:02:50

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

我正在使用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)
{
}

1 个答案:

答案 0 :(得分:2)

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

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

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

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

<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