Добрый день!
Решил разобраться с аутентификацией и сделал проект с чистого листа (.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 с аутентификацией отдельных пользователей для меня пока слишком сложен, хотя он делает именно то, что мне требуется.
Из-за чего возникает моя ошибка? Быть может я неправильно прокидываю опции через конструкторы?