而不是默认的5个表,我只想使用用户登录表和用户表。因为我只有一个'用户'类型(管理员),并没有其他表的要点。我使用的是ASP MVC 5框架和实体框架6(Code First方法)。使用ASP身份和2个表执行身份验证
如何在我的应用程序中实现此目的?
而不是默认的5个表,我只想使用用户登录表和用户表。因为我只有一个'用户'类型(管理员),并没有其他表的要点。我使用的是ASP MVC 5框架和实体框架6(Code First方法)。使用ASP身份和2个表执行身份验证
如何在我的应用程序中实现此目的?
您可以创建自己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);
但它没有解决,但如果有人知道如何解决这个问题,我们可以保持简单,我会很感激任何建议。
当您运行添加迁移“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
这不适用于自动迁移,虽然是一个简单的解决方案。只要注意OP ** do **想要'AspNetUserLogins'。 – Alisson