C# 查询标识表数据库时,实体类型ApplicationUser不是当前上下文模型的一部分

C# 查询标识表数据库时,实体类型ApplicationUser不是当前上下文模型的一部分,c#,.net,entity-framework,C#,.net,Entity Framework,我的项目设置如下。。 主要项目 DataAccess是一个类库 EntityFramework数据库表是一个类库 EntityFramework标识表是一个类库 在我的主要项目webconfig中,我有两个连接字符串,一个用于普通数据库表,另一个用于标识表。普通数据库表的connectionstring是实体框架connectionstring <add name="HWCEntities" connectionString="metadata=res://*/HWCEF.csdl|res

我的项目设置如下。。 主要项目 DataAccess是一个类库 EntityFramework数据库表是一个类库 EntityFramework标识表是一个类库

在我的主要项目webconfig中,我有两个连接字符串,一个用于普通数据库表,另一个用于标识表。普通数据库表的connectionstring是实体框架connectionstring

<add name="HWCEntities" connectionString="metadata=res://*/HWCEF.csdl|res://*/HWCEF.ssdl|res://*/HWCEF.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=****;initial catalog=****;persist security info=True;user id=****;password=****;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient"/>
因此,我没有使用Identity connectionstring,而是使用这个

<add name="HWCIdentityEntities" connectionString="Data Source=****;Initial Catalog=****;User ID=****;password=****;Integrated Security=false;" providerName="System.Data.SqlClient"/>
如何解决此问题,以便查询标识数据库?我假设我需要在主应用程序中使用Identity connectionstring?

这对我很有用:

1) 确保您的上下文看起来相似:

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

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }
}
public类ApplicationDbContext:IdentityDbContext
{
公共应用程序上下文()
:base(“myConnectString”,throwifvv1schema:false)
{
}
公共静态应用程序上下文创建()
{
返回新的ApplicationDbContext();
}
}
2) web.config中应仅为1个连接字符串

3) 告诉Identity使用该上下文而不是IdentityDbContext。搜索IdentityDbContext并将其替换为ApplicationDbContext(或您所称的任何内容)。例如:

A) Startup.cs:
app.CreatePerOwinContext((选项,上下文)=>new ApplicationDbContext())

B) IndentityConfig.cs(用户管理器和角色管理器):
var-manager=newapplicationusermanager(newuserstore(context.Get())

var-manager=newapplicationrolemager(newrolestore(context.Get());

在阅读了一个又一个解决方案之后,多亏了史蒂夫·格林,我终于找到了问题所在。我必须更改其中一个连接字符串的名称,并更改其上下文。现在我可以登录并运行查询了。

您的上下文类是什么样子的?它继承自何处?@DavidG,我将标识表保留在自己的数据库中,然后从数据库生成EF。您需要在此处显示更多代码,还有什么是
SignInManager
?我还应该添加什么代码?因为我不确定。SignInManager,这些都是在创建MVC项目时生成的。您是先创建DB的吗?看到了吗?我的上下文看起来像你的,我只有一个IdentityDbContext,它就是我的上下文所在的位置(在我的IdentityModels.cs中)。我知道我应该在我的网络配置中有一个connectionstring,我确实有,但这取决于我取消注释的是哪一个,这将决定我能做什么。我可以登录而查询不起作用,也可以不登录而查询起作用。我还创建了一个新项目,将控制器和视图导入其中,并从现有数据库生成实体框架。该项目包含3个项目,主要项目、环境足迹项目和DAL项目。因此,我将标识表与另一个数据库相结合,项目也会崩溃,我得到了一个旷日持久的错误,这个错误是..System.Data.Entity.Infrastructure.Exception。如果我删除了throw新代码firstException();从Context.cs中,我得到一堆错误,说我丢失了密钥
<add name="HWCIdentityEntities" connectionString="Data Source=****;Initial Catalog=****;User ID=****;password=****;Integrated Security=false;" providerName="System.Data.SqlClient"/>
protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("myConnectString", throwIfV1Schema: false)
    {
    }

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }
}
var manager = new ApplicationRoleManager(new RoleStore<IdentityRole>(context.Get<ApplicationDbContext>()));