0

而不是默认的5个表,我只想使用用户登录表用户表。因为我只有一个'用户'类型(管理员),并没有其他表的要点。我使用的是ASP MVC 5框架和实体框架6(Code First方法)。使用ASP身份和2个表执行身份验证

如何在我的应用程序中实现此目的?

回答

0

您可以创建自己User继承IdentityUser这样的:

public class User : IdentityUser 
{ 

} 

然后你忽略你的DbContext其他类,包括原始IdentityUser,包括你的用户DbSet

public class MyDbContext : IdentityDbContext 
{ 

    public DbSet<User> Users { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     // avoid some base class sets... 

     modelBuilder.Ignore<IdentityUser>(); 
     modelBuilder.Ignore<IdentityUserRole>(); 
     modelBuilder.Ignore<IdentityRole>(); 
     modelBuilder.Ignore<IdentityUserClaim>(); 

     // keep identity's original configurations for AspNetUsers and AspNetUserLogins 
     EntityTypeConfiguration<User> configuration = modelBuilder.Entity<User>().ToTable("AspNetUsers"); 
     configuration.HasMany<IdentityUserLogin>(u => u.Logins).WithRequired().HasForeignKey(ul => ul.UserId); 
     IndexAttribute indexAttribute = new IndexAttribute("UserNameIndex") 
     { 
      IsUnique = true 
     }; 
     configuration.Property((Expression<Func<User, string>>)(u => u.UserName)).IsRequired().HasMaxLength(0x100).HasColumnAnnotation("Index", new IndexAnnotation(indexAttribute)); 
     configuration.Property((Expression<Func<User, string>>)(u => u.Email)).HasMaxLength(0x100); 
     modelBuilder.Entity<IdentityUserLogin>().HasKey(l => new { LoginProvider = l.LoginProvider, ProviderKey = l.ProviderKey, UserId = l.UserId }).ToTable("AspNetUserLogins"); 

    } 

} 

之所以我忽略了原来的IdentityUser并创建了我的ow ñUser是因为此异常:

的导航属性“角色”是不是 型“IdentityUser”声明的属性。确认它没有被明确地从模型 中排除,并且它是有效的导航属性。

我试过使用modelBuilder.Entity<IdentityUser>().Ignore(u => u.Roles);但它没有解决,但如果有人知道如何解决这个问题,我们可以保持简单,我会很感激任何建议。

0

当您运行添加迁移“ApplicationDbContext”,它给你的迁移文件包含了所有的疑问,你所需要的就是编写代码来删除像其他4桌代码:

enable-migrations 
add-migration "drop tables" //selected specific context 

记下迁移代码类内的下面的代码

DropTable("dbo.AspNetUserClaims"); 
DropTable("dbo.AspNetUserLogins"); 
DropTable("dbo.AspNetUserRoles"); 
DropTable("dbo.AspNetRoles"); 

最后运行下面的命令

update-database 
+0

这不适用于自动迁移,虽然是一个简单的解决方案。只要注意OP ** do **想要'AspNetUserLogins'。 – Alisson

相关问题