Основные таблицы Asp.net не создаются в базе данных - PullRequest
0 голосов
/ 05 июля 2018

Когда я вижу в других примерах проектов, количество таблиц, созданных для поддержки 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>();
        }

Класс 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; }
    }

Класс пользователя:

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; }

    }

1 Ответ

0 голосов
/ 06 июля 2018

Чтобы получить все AspNetRoles, etc таблицы "бесплатно", вам нужно изменить ApplicationDbContext на IdentityDbContext<User> вместо просто DbContext. IdentityDbContext<T> находится в пространстве имен Microsoft.AspNetCore.Identity.EntityFrameworkCore. Как видно из исходного кода, https://github.com/aspnet/Identity/blob/master/src/EF/IdentityDbContext.cs, IdentityDbContext введет необходимые DbSet свойства. Как вы правильно определили в комментарии к своему вопросу, вам нужно будет позвонить base.OnModelCreating(builder) и заново создать файлы миграции.

...