加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何删除dbo.AspNetUserClaims和dbo.AspNetUserLogins表(I

发布时间:2020-12-15 08:34:00 所属栏目:百科 来源:网络整理
导读:我们的应用程序不需要身份使用的过多“登录”和“声明”功能.如果没有在数据库中创建这些表格simlpy会很好,但我不想重新实现所有的身份类… 我假设它是这样的 public ApplicationDbContext : IdentityDbContext{ [...] protected override void OnModelCreat
我们的应用程序不需要身份使用的过多“登录”和“声明”功能.如果没有在数据库中创建这些表格simlpy会很好,但我不想重新实现所有的身份类…

我假设它是这样的

public ApplicationDbContext : IdentityDbContext
{
        [...]

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            modelBuilder.Ignore<IdentityUserClaim>();
            modelBuilder.Ignore<IdentityUserLogin>();
        }
}

您会认为这根据功能描述有效,但事实并非如此.仍然会创建AspNetUserClaim和AspNetUserLogins表.

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

解决方法

这是针对您的案例的ApplicationDbContext的OnModelCreating方法的实现.事实上,它只是IdentityDbContext的OnModelCreating方法,忽略了IdentityUserClaim和IdentityUserLogin实体.

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

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        // Needed to ensure subclasses share the same table
        var user = modelBuilder.Entity<ApplicationUser>()
            .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<IdentityUserRole>()
            .HasKey(r => new { r.UserId,r.RoleId })
            .ToTable("AspNetUserRoles");

        var role = modelBuilder.Entity<IdentityRole>()
            .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<IdentityUserLogin>();
        modelBuilder.Ignore<IdentityUserClaim>();
    }
}

以下是相关的代码行:

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

根据需要,如果没有dbo.AspNetUserClaims和dbo.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,RoleId = c.String(nullable: false,})
    .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",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,})
    .PrimaryKey(t => t.Id)
    .Index(t => t.UserName,name: "UserNameIndex");

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读