【问题标题】:The entity type ApplicationUser is not part of the model for the current context when querying Identity table database查询 Identity 表数据库时,实体类型 ApplicationUser 不是当前上下文模型的一部分
【发布时间】:2017-09-19 12:51:00
【问题描述】:

我的项目设置如下.. 主要项目 DataAccess 是一个类库 EntityFramework 数据库表它是一个类库 EntityFramework Identity 表它是一个类库

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

<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"/>

身份实体框架连接字符串是这样的

<add name="HWCIdentityEntities" connectionString="metadata=res://*/HWCIdentityEF.csdl|res://*/HWCIdentityEF.ssdl|res://*/HWCIdentityEF.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" />

但是,如果我将该连接字符串放在主项目的 webconfig 中,并尝试登录 Web 应用程序,我会收到此错误

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

它指向AccountController的第78行

var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);

所以我没有使用身份连接字符串,而是使用这个

<add name="HWCIdentityEntities" connectionString="Data Source=****;Initial Catalog=****;User ID=****;password=****;Integrated Security=false;" providerName="System.Data.SqlClient"/>

使用该连接字符串不会引发任何错误,我可以使用该连接字符串,但是当我尝试查询身份数据库时,我会收到此错误

“System.Data.Entity.Infrastructure.UnintentionalCodeFirstException”类型的异常发生在 HWC.Identity.dll 中,但未在用户代码中处理 附加信息:上下文在 Code First 模式下使用,代码是从 EDMX 文件生成的,用于 Database First 或 Model First 开发。这将无法正常工作。要解决此问题,请不要删除引发此异常的代码行。如果您希望使用 Database First 或 Model First,请确保 Entity Framework 连接字符串包含在启动项目的 app.config 或 web.config 中。如果要创建自己的 DbConnection,请确保它是 EntityConnection 而不是其他类型的 DbConnection,并且将其传递给采用 DbConnection 的基本 DbContext 构造函数之一。要了解有关 Code First、Database First 和 Model First 的更多信息,请参阅此处的实体框架文档:http://go.microsoft.com/fwlink/?LinkId=394715

这个错误是在我的 HWCIdentityEF.Context.csdl|res 中抛出的

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

如何解决此问题以便查询身份数据库?我假设我需要在主应用程序中使用 Identity 连接字符串?

【问题讨论】:

  • 你的上下文类是什么样的?它继承自什么?
  • @DavidG,我拿了身份表,将它们留在自己的数据库中,然后从数据库中生成 EF
  • 你需要在这里显示更多代码,还有,SignInManager是什么?
  • 我应该添加什么其他代码?因为我不确定。 SignInManager,这些都是你创建MVC项目时生成的
  • 你是数据库第一吗?见this?

标签: c# .net entity-framework


【解决方案1】:

这对我有用:

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

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

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

2) web.config 中应该只有 1 个连接字符串

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

A) Startup.cs:app.CreatePerOwinContext&lt;ApplicationDbContext&gt;((options, context)=&gt;new ApplicationDbContext());

B) IndentityConfig.cs(用户管理器和角色管理器):var manager = new ApplicationUserManager(new UserStore&lt;ApplicationUser&gt;(context.Get&lt;ApplicationDbContext&gt;()));

var manager = new ApplicationRoleManager(new RoleStore<IdentityRole>(context.Get<ApplicationDbContext>()));

【讨论】:

  • 我的上下文看起来像你的,我只有一个 IdentityDbContext,它是我的上下文所在的位置(在我的 IdentityModels 中).cs。我知道我的 webconfig 中应该有一个连接字符串,我确实这样做了,但取决于我取消注释的那个,将决定我能做什么。我可以登录但我的任何查询都不起作用,或者我无法登录并且我的查询有效。我还创建了一个新项目并向其中导入了控制器和视图,并从我现有的数据库中生成了我的实体框架内容。该项目包含 3 个项目,即 Main、EF 和 DAL。所以我将身份表结合到另一个数据库中
  • 那个项目也爆炸了,我得到了那个冗长的错误,这个..System.Data.Entity.Infrastructure.UnintentionalCodeFirstException。如果我删除 throw new UnintentionalCodeFirstException();从 Context.cs 然后我收到一堆错误,说我缺少键
【解决方案2】:

在阅读了一个又一个解决方案之后,感谢史蒂夫格林,我终于弄清楚了问题所在。我不得不更改其中一个连接字符串的名称,并更改其上下文。现在我可以登录并运行我的查询了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-30
    • 2017-06-19
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多