Jeer
@Jeer
уверенный пользователь

Как правильно настроить наследование контекстов энтити?

Добрый день!
Решил разобраться с аутентификацией и сделал проект с чистого листа (.net core). Хочу сделать так, чтобы контекст основной базы данных наследовался от контекста моих пользователей, чтобы можно было переиспользовать в других проектах.
Создаю IdentityContext, наследуясь от DbContext:

public class IdentityContext : DbContext
    {
        public DbSet<User> Users { get; set; }
        public DbSet<Profile> Profiles { get; set; }
        public DbSet<Role> Roles { get; set; }

        public IdentityContext(DbContextOptions options)
            : base(options)
        {
            Database.EnsureCreated();
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder
                .Entity<User>()
                .HasOne(u => u.Profile)
                .WithOne(p => p.User)
                .HasForeignKey<Profile>(p => p.Id);

            modelBuilder.Entity<UserInRole>()
            .HasKey(t => new { t.UserId, t.RoleId });

            modelBuilder.Entity<UserInRole>()
                .HasOne(sc => sc.User)
                .WithMany(s => s.UserInRoles)
                .HasForeignKey(sc => sc.UserId);

            modelBuilder.Entity<UserInRole>()
                .HasOne(sc => sc.Role)
                .WithMany(c => c.UserInRoles)
                .HasForeignKey(sc => sc.RoleId);
        }
    }


Создаю основную базу (у меня планируется сайт с картиночками) и наследуюсь от созданного IdentityContext:

public class ImagesContext : IdentityContext
    {
        public ImagesContext(DbContextOptions<ImagesContext> options) : base(options) { }

        public DbSet<ImgBuffer> ImgBuffer { get; set; }
    }


В Startup.cs добавляю конфиг для контекста:

public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<ImagesContext>(options =>
                options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

            services.AddMvc();
        }


При попытке update-database вываливается ошибка, что таблица "ImgBuffer" не может быть добавлена, так как уже существует. Я лезу на сервер, база создана, таблицы созданы.
Но эта ошибка сообщает, что сделано что-то не правильно.
Тот код, который есть в темплейте .net framework mvc с аутентификацией отдельных пользователей для меня пока слишком сложен, хотя он делает именно то, что мне требуется.
Из-за чего возникает моя ошибка? Быть может я неправильно прокидываю опции через конструкторы?
  • Вопрос задан
  • 138 просмотров
Решения вопроса 1
Jeer
@Jeer Автор вопроса
уверенный пользователь
О, нашел свой вопрос без ответов в рассылке на почте )
В общем, как-то вяло, совершенно ни одного ответа, хотя и код выложен и проблема обозначена.
Дело было в строке:
Database.EnsureCreated();
Я честно скопировал её из туториалов, не разбираясь что она делает.
Собственно, я так и не смотрел, что она делает, название, вроде, говорящее ) После удаления, всё отработало без ошибок
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы