如何删除dbo.AspNetUserClaims和dbo.AspNetUserLogins表(IdentityUserClaim和IdentityUserLogin实体)?

我们的应用程序不需要身份使用的过多“登录”和“声明”function。 如果这些表没有在数据库中创建,那将会很好,但我不想重新实现所有的身份类……

我假设它是这样的

public ApplicationDbContext : IdentityDbContext { [...] protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Ignore(); modelBuilder.Ignore(); } } 

您会认为这根据function描述有效,但事实并非如此。 AspNetUserClaimAspNetUserLogins表仍然会被创建。

这样做的正确方法是什么?

这是针对您的案例的ApplicationDbContextOnModelCreating方法的实现。 事实上,它只是IdentityDbContextOnModelCreating方法,忽略了IdentityUserClaimIdentityUserLogin实体。

请注意, OnModelCreating覆盖不应调用base.OnModelCreating方法。

 public class ApplicationDbContext : IdentityDbContext { protected override void OnModelCreating(DbModelBuilder modelBuilder) { // Needed to ensure subclasses share the same table var user = modelBuilder.Entity() .ToTable("AspNetUsers"); user.HasMany(u => u.Roles).WithRequired().HasForeignKey(ur => ur.UserId); user.Ignore(u => u.Claims); user.Ignore(u => u.Logins); user.Property(u => u.UserName) .IsRequired() .HasMaxLength(256) .HasColumnAnnotation("Index", new IndexAnnotation(new IndexAttribute("UserNameIndex") { IsUnique = true })); // CONSIDER: u.Email is Required if set on options? user.Property(u => u.Email).HasMaxLength(256); modelBuilder.Entity() .HasKey(r => new { r.UserId, r.RoleId }) .ToTable("AspNetUserRoles"); var role = modelBuilder.Entity() .ToTable("AspNetRoles"); role.Property(r => r.Name) .IsRequired() .HasMaxLength(256) .HasColumnAnnotation("Index", new IndexAnnotation(new IndexAttribute("RoleNameIndex") { IsUnique = true })); role.HasMany(r => r.Users).WithRequired().HasForeignKey(ur => ur.RoleId); modelBuilder.Ignore(); modelBuilder.Ignore(); } } 

以下是相关的代码行:

 user.Ignore(u => u.Claims); user.Ignore(u => u.Logins); modelBuilder.Ignore(); modelBuilder.Ignore(); 

根据需要,如果没有dbo.AspNetUserClaimsdbo.AspNetUserLogins表,将导致以下迁移:

 CreateTable( "dbo.AspNetRoles", c => new { Id = c.String(nullable: false, maxLength: 128), Name = c.String(nullable: false, maxLength: 256), }) .PrimaryKey(t => t.Id) .Index(t => t.Name, unique: true, name: "RoleNameIndex"); CreateTable( "dbo.AspNetUserRoles", c => new { UserId = c.String(nullable: false, maxLength: 128), RoleId = c.String(nullable: false, maxLength: 128), }) .PrimaryKey(t => new { t.UserId, t.RoleId }) .ForeignKey("dbo.AspNetRoles", t => t.RoleId, cascadeDelete: true) .ForeignKey("dbo.AspNetUsers", t => t.UserId, cascadeDelete: true) .Index(t => t.UserId) .Index(t => t.RoleId); CreateTable( "dbo.AspNetUsers", c => new { Id = c.String(nullable: false, maxLength: 128), Email = c.String(maxLength: 256), EmailConfirmed = c.Boolean(nullable: false), PasswordHash = c.String(), SecurityStamp = c.String(), PhoneNumber = c.String(), PhoneNumberConfirmed = c.Boolean(nullable: false), TwoFactorEnabled = c.Boolean(nullable: false), LockoutEndDateUtc = c.DateTime(), LockoutEnabled = c.Boolean(nullable: false), AccessFailedCount = c.Int(nullable: false), UserName = c.String(nullable: false, maxLength: 256), }) .PrimaryKey(t => t.Id) .Index(t => t.UserName, unique: true, name: "UserNameIndex");