C# 查询标识表数据库时,实体类型ApplicationUser不是当前上下文模型的一部分
我的项目设置如下。。 主要项目 DataAccess是一个类库 EntityFramework数据库表是一个类库 EntityFramework标识表是一个类库 在我的主要项目webconfig中,我有两个连接字符串,一个用于普通数据库表,另一个用于标识表。普通数据库表的connectionstring是实体框架connectionstringC# 查询标识表数据库时,实体类型ApplicationUser不是当前上下文模型的一部分,c#,.net,entity-framework,C#,.net,Entity Framework,我的项目设置如下。。 主要项目 DataAccess是一个类库 EntityFramework数据库表是一个类库 EntityFramework标识表是一个类库 在我的主要项目webconfig中,我有两个连接字符串,一个用于普通数据库表,另一个用于标识表。普通数据库表的connectionstring是实体框架connectionstring <add name="HWCEntities" connectionString="metadata=res://*/HWCEF.csdl|res
<add name="HWCEntities" connectionString="metadata=res://*/HWCEF.csdl|res://*/HWCEF.ssdl|res://*/HWCEF.msl;provider=System.Data.SqlClient;provider connection string="data source=****;initial catalog=****;persist security info=True;user id=****;password=****;MultipleActiveResultSets=True;App=EntityFramework"" 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>()));