【发布时间】:2016-12-25 19:44:04
【问题描述】:
我不知道为什么,但是当我尝试登录到我的 EF Code First 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");
}
}
这是我的 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
}
我的连接字符串如下:
<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] 属性只是为了检查是否在数据库中创建了实际用户。事实证明,根本没有创建该用户!有什么想法吗?
【问题讨论】:
-
那么,您是否只有一个具有身份所需表的数据库连接?
-
是的。当我在 SQL Management Studio 中签入时,所有成员表都在那里!
-
我已经为您的问题发布了一个潜在的解决方案。试一试,让我知道它是否适合您。
-
您能否发布您如何构建上下文以便我们查看?
-
@DavidsonSousa 我已经添加了上下文代码
标签: c# asp.net-mvc entity-framework