未在数据库中创建身份的 Asp.net 核心表

use*_*784 0 database asp.net-identity

当我在其他示例项目中看到时,为支持数据库中的 Identity 创建的表数量很大(例如 AspNetRoles、AspNetUserClaims 等),但在我的情况下,当我进行迁移和更新时仅用户表已经被创造了。是什么原因?这是我在启动、dbcontext 和我的班级用户中的代码:

public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
            services.AddSession();
            services.AddMemoryCache();
            services.AddDbContext<ApplicationDbContext>( options =>
                             options.UseSqlServer(Configuration["Data:photoarchiver:ConnString"]));
            services.AddIdentity<User, IdentityRole > (
                opts => {
                    opts.Password.RequireDigit = false;
                    opts.Password.RequiredLength = 7;
                    opts.Password.RequireLowercase = true;
                    opts.Password.RequireUppercase = false;
                    opts.Password.RequireNonAlphanumeric = false;
                }).AddEntityFrameworkStores<ApplicationDbContext>();
        }
Run Code Online (Sandbox Code Playgroud)

类 DbContext:

public class ApplicationDbContext : DbContext
    {
        public ApplicationDbContext(DbContextOptions options) : base(options)
        {

        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<User>().ToTable("Users");
            modelBuilder.Entity<User>().HasMany(u => u.Photos).WithOne(i => i.User);

            modelBuilder.Entity<Photo>().ToTable("Photos");
            modelBuilder.Entity<Photo>().HasOne(i => i.User).WithMany(u => u.Photos);

            modelBuilder.Entity<Category>().ToTable("Categories");

        }

        public DbSet<Photo> Photos { get; set; }
        public DbSet<Category> Categories { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

类用户:

public class User : IdentityUser
    {
        public virtual List<Photo> Photos { get; set; }

        [Required]
        public string DisplayName { get; set; }
        public string Notes { get; set; }
        [Required]
        public DateTime CreatedDate { get; set; }

    }
Run Code Online (Sandbox Code Playgroud)

小智 5

AspNetRoles, etc“免费”获取所有表,您需要更改您的ApplicationDbContextto 扩展,IdentityDbContext<User>而不仅仅是DbContext. IdentityDbContext<T>Microsoft.AspNetCore.Identity.EntityFrameworkCore命名空间中找到。从源码可以看到https://github.com/aspnet/Identity/blob/master/src/EF/IdentityDbContext.csIdentityDbContext会带入需要的DbSet属性。正如您在问题的评论中正确识别的那样,您需要调用base.OnModelCreating(builder)并重新制作迁移文件。