Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF代码优先:实体类型ApplicationUser不是当前上下文模型的一部分_C#_Asp.net Mvc_Entity Framework - Fatal编程技术网

C# EF代码优先:实体类型ApplicationUser不是当前上下文模型的一部分

C# EF代码优先:实体类型ApplicationUser不是当前上下文模型的一部分,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我不知道为什么,但当我尝试登录到我的EF代码第一个MVC应用程序时,我会遇到这个错误 我的家庭控制器具有[Authorize]属性,因此我被直接重定向到登录页面,但一旦我登录,我就会看到死亡的黄色屏幕和错误: 实体类型ApplicationUser不是当前上下文模型的一部分 代码 这里是我的上下文代码: public class PdContext : IdentityDbContext<ApplicationUser> { public PdContext() : base("

我不知道为什么,但当我尝试登录到我的EF代码第一个MVC应用程序时,我会遇到这个错误

我的家庭控制器具有
[Authorize]
属性,因此我被直接重定向到登录页面,但一旦我登录,我就会看到死亡的黄色屏幕和错误:

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

代码

这里是我的上下文代码:

public class PdContext : IdentityDbContext<ApplicationUser>
{
  public PdContext() : base("PdContext", throwIfV1Schema: false)
  {
    Configuration.LazyLoadingEnabled = true;
  }

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

  public DbSet<Business> Businesses { get; set; }
  public DbSet<Category> Categories { get; set; }
  public DbSet<Brand> Brands { get; set; }
  public DbSet<Product> Products { get; set; }
  public DbSet<Address> Addresses { get; set; }
  public DbSet<Invoice> Invoices { get; set; }
  public DbSet<Payment> Payments { get; set; }
  public DbSet<Order> Orders { get; set; }

  protected override void OnModelCreating(DbModelBuilder modelBuilder)
  {
    modelBuilder.HasDefaultSchema("PD");
    modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
    base.OnModelCreating(modelBuilder);
    modelBuilder.Entity<IdentityRole>().HasKey(r => r.Id).ToTable("AspNetRoles");
    modelBuilder.Entity<IdentityUserLogin>().HasKey(l => new { l.UserId, l.LoginProvider, l.ProviderKey }).ToTable("AspNetUserLogins");
    modelBuilder.Entity<IdentityUserRole>().HasKey(r => new { r.RoleId, r.UserId }).ToTable("AspNetUserRoles");
    modelBuilder.Entity<IdentityUserClaim>().ToTable("AspNetUserClaims");
    modelBuilder.Entity<ApplicationUser>().ToTable("User");
  }
}
公共类pContext:IdentityDbContext
{
public pContext():base(“pContext”,throwifvv1schema:false)
{
Configuration.LazyLoadingEnabled=true;
}
公共静态pContext创建()
{
返回新的pContext();
}
公共数据库集业务{get;set;}
公共数据库集类别{get;set;}
公共DbSet品牌{get;set;}
公共数据库集产品{get;set;}
公共数据库集地址{get;set;}
公共数据库集{get;set;}
公共数据库集{get;set;}
公共数据库集命令{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.hasdaultschema(“PD”);
modelBuilder.Conventions.Remove();
基于模型创建(modelBuilder);
modelBuilder.Entity().HasKey(r=>r.Id).ToTable(“AspNetRoles”);
modelBuilder.Entity().HasKey(l=>new{l.UserId,l.LoginProvider,l.ProviderKey}).ToTable(“AspNetUserLogins”);
modelBuilder.Entity().HasKey(r=>new{r.RoleId,r.UserId}).ToTable(“AspNetUserRoles”);
modelBuilder.Entity().ToTable(“AspNetUserClaims”);
modelBuilder.Entity().ToTable(“用户”);
}
}
下面是我的Seed方法中的代码,它负责创建我的用户和角色

protected override void Seed(Context.PdContext context)
{
  var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));
  var userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context));
  if (!roleManager.RoleExists("Admin"))
  {
    roleManager.Create(new IdentityRole("Admin"));
  }

  var adminUser = new ApplicationUser { UserName = "myemail@gmail.com", Email = "myemail@gmail.com" };

  if (userManager.FindByName("myemail@gmail.com") != null) return;

  var adminResult = userManager.Create(adminUser, "strongPassword");

  if (adminResult.Succeeded)
  {
    userManager.AddToRole(adminUser.Id, "Admin");
  }

  // other non user related seeding happening here
}
protected override void Seed(Context.PdContext上下文)
{
var角色管理器=新角色管理器(新角色存储(上下文));
var userManager=newusermanager(newuserstore(context));
如果(!roleManager.RoleExists(“Admin”))
{
roleManager.Create(新的IdentityRole(“管理员”));
}
var adminUser=新应用程序用户{UserName=”myemail@gmail.com“,电子邮件=”myemail@gmail.com" };
if(userManager.FindByName(“myemail@gmail.com“”!=null)返回;
var adminResult=userManager.Create(adminUser,“strong密码”);
if(adminResult.successed)
{
AddToRole(adminUser.Id,“Admin”);
}
//其他与用户无关的种子设定发生在此处
}
我的连接字符串如下所示:

<add name="PdContext" providerName="System.Data.SqlClient" connectionString="Data Source=My-PC;Initial Catalog=Phoneden;Integrated Security=False;User Id=sa;Password=strongPass;MultipleActiveResultSets=True" />

我已经检查过了,我只有一个连接字符串(我对错误的研究表明可能有两个连接字符串,在我的例子中没有)

更新


我禁用了
[Authorize]
属性,只是为了检查是否在数据库中创建了实际用户。事实证明,该用户根本没有被创建!有什么想法吗?

这可能是一个简单的解决方案,只要将连接字符串中的集成安全属性更改为
True
。这说明将在提供的数据库中找到并使用标识表

因此,您的连接字符串将是:

<add name="PdContext" providerName="System.Data.SqlClient" connectionString="Data Source=My-PC;Initial Catalog=Phoneden;Integrated Security=True;User Id=sa;Password=strongPass;MultipleActiveResultSets=True" />

这可能是一个简单的解决方案,只要将连接字符串中的集成安全属性更改为
True
。这说明将在提供的数据库中找到并使用标识表

因此,您的连接字符串将是:

<add name="PdContext" providerName="System.Data.SqlClient" connectionString="Data Source=My-PC;Initial Catalog=Phoneden;Integrated Security=True;User Id=sa;Password=strongPass;MultipleActiveResultSets=True" />

应用程序中可能有两种不同的上下文,这在我们开始使用标准ASP.NET MVC模板时是正常的。我通常做的是删除标准上下文并调整我正在创建的上下文(AppContext),如下代码所示:

public class AppContext : IdentityDbContext<ApplicationUser>
{
    public AppContext() : base("PdContext")
    {
    }
}
公共类AppContext:IdentityDbContext
{
public AppContext():基(“pContext”)
{
}
}

问题在于继承了
IdentityDbContext
,这使得成员资格可以在您的自定义上下文中工作。

您的应用程序中可能有两个不同的上下文,这在我们开始使用标准ASP.NET MVC模板时是正常的。我通常做的是删除标准上下文并调整我正在创建的上下文(AppContext),如下代码所示:

public class AppContext : IdentityDbContext<ApplicationUser>
{
    public AppContext() : base("PdContext")
    {
    }
}
公共类AppContext:IdentityDbContext
{
public AppContext():基(“pContext”)
{
}
}

问题在于继承了
IdentityDbContext
,这使得成员资格可以在您的自定义上下文中工作。

我不知道为什么会这样,但我删除了我的迁移文件夹,清理了我的解决方案,然后重新启用了迁移,并添加了
初始创建
迁移。然后
更新了数据库
,现在一切似乎都正常了!:/

我不知道为什么会这样,但我删除了我的Migrations文件夹,清理了我的解决方案,然后重新启用了迁移,并添加了一个
InitialCreate
迁移。然后
更新了数据库
,现在一切似乎都正常了!:/

那么,您是否只有一个数据库连接具有标识所需的表?是的。当我在SQLManagementStudio中检查时,所有成员表都在那里!我已经发布了一个解决你问题的潜在方案。试试看,让我知道它是否适合你。你能发布你是如何建立你的上下文的,这样我们就可以看一看吗?@Davidsonsosa我已经添加了上下文代码。那么,你是否只有一个数据库连接具有标识所需的表?是的。当我在SQLManagementStudio中检查时,所有成员表都在那里!我已经发布了一个解决你问题的潜在方案。试试看,让我知道它是否对你有用。你能发布你是如何构建你的上下文的,这样我们就可以看一看吗?@Davidsonsosa我已经添加了上下文代码。我只是尝试了你的建议,没有什么不同。我还是会犯同样的错误。我只是尝试了你的建议,结果没有什么不同。我仍然收到相同的错误。我检查了,我的是从
IdentityDbContext
继承的,我在原始帖子中添加了代码。我检查了