117 lines
4.4 KiB
C#
117 lines
4.4 KiB
C#
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.EntityFrameworkCore.Design;
|
|
|
|
|
|
namespace AuthHex
|
|
{
|
|
public class AppDBContext : DbContext
|
|
{
|
|
public AppDBContext(DbContextOptions<AppDBContext> options) : base(options) { }
|
|
public DbSet<Models.User> Users => Set<Models.User>();
|
|
public DbSet<Models.Role> Roles => Set<Models.Role>();
|
|
public DbSet<Models.UserType> UserType => Set<Models.UserType>();
|
|
public DbSet<Models.UserSession> UserSessions => Set<Models.UserSession>();
|
|
|
|
public DbSet<Models.Token> Token => Set<Models.Token>();
|
|
|
|
public DbSet<Models.AuthEventLog> AuthEventLogs => Set<Models.AuthEventLog>();
|
|
public DbSet<Models.UserMfa> UserMfas => Set<Models.UserMfa>();
|
|
public DbSet<Models.UserProvider> UserProviders => Set<Models.UserProvider>();
|
|
public DbSet<Models.Recovery> Recovery => Set<Models.Recovery>();
|
|
public DbSet<Models.SysConfig> SysConfigs => Set<Models.SysConfig>();
|
|
|
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
|
{
|
|
base.OnModelCreating(modelBuilder);
|
|
|
|
// Configure UserSession primary key
|
|
modelBuilder.Entity<Models.UserSession>()
|
|
.HasKey(us => us.SessionId);
|
|
|
|
// Configure relationship between UserSession and User
|
|
modelBuilder.Entity<Models.UserSession>()
|
|
.HasOne(us => us.User)
|
|
.WithMany(u => u.Sessions)
|
|
.HasForeignKey(us => us.UserId)
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
|
|
// Configure AuthEventLog primary key
|
|
modelBuilder.Entity<Models.AuthEventLog>()
|
|
.HasKey(ae => ae.Id);
|
|
|
|
// Configure Token primary key and relationships
|
|
modelBuilder.Entity<Models.Token>()
|
|
.HasKey(t => t.TokenId);
|
|
|
|
modelBuilder.Entity<Models.Token>()
|
|
.HasOne(t => t.User)
|
|
.WithMany()
|
|
.HasForeignKey(t => t.UserId)
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
|
|
// Configure UserMfa primary key and relationships
|
|
modelBuilder.Entity<Models.UserMfa>()
|
|
.HasKey(um => um.UserMfaId);
|
|
|
|
modelBuilder.Entity<Models.UserMfa>()
|
|
.HasOne(um => um.User)
|
|
.WithOne(u => u.UserMfa)
|
|
.HasForeignKey<Models.UserMfa>(um => um.UserId)
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
|
|
// Configure UserProvider primary key and relationships
|
|
modelBuilder.Entity<Models.UserProvider>()
|
|
.HasKey(up => up.ProviderId);
|
|
|
|
modelBuilder.Entity<Models.UserProvider>()
|
|
.HasOne(up => up.User)
|
|
.WithMany(u => u.Providers)
|
|
.HasForeignKey(up => up.UserId)
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
|
|
// Configure Role primary key
|
|
modelBuilder.Entity<Models.Role>()
|
|
.HasKey(r => r.RoleId);
|
|
|
|
// Configure UserType primary key
|
|
modelBuilder.Entity<Models.UserType>()
|
|
.HasKey(ut => ut.UserTypeId);
|
|
|
|
// Configure User primary key and relationships
|
|
modelBuilder.Entity<Models.User>()
|
|
.HasKey(u => u.Id);
|
|
|
|
modelBuilder.Entity<Models.User>()
|
|
.HasOne(u => u.Role)
|
|
.WithMany()
|
|
.HasForeignKey(u => u.RoleId)
|
|
.OnDelete(DeleteBehavior.Restrict);
|
|
|
|
modelBuilder.Entity<Models.User>()
|
|
.HasOne(u => u.UserType)
|
|
.WithMany()
|
|
.HasForeignKey(u => u.UserTypeId)
|
|
.OnDelete(DeleteBehavior.Restrict);
|
|
}
|
|
}
|
|
|
|
public class ApplicationDbContextFactory : IDesignTimeDbContextFactory<AppDBContext>
|
|
{
|
|
public AppDBContext CreateDbContext(string[] args)
|
|
{
|
|
var config = new ConfigurationBuilder()
|
|
.SetBasePath(Directory.GetCurrentDirectory())
|
|
.AddJsonFile("appsettings.json", optional: false)
|
|
.Build();
|
|
|
|
var optionsBuilder = new DbContextOptionsBuilder<AppDBContext>();
|
|
var connectionString = config.GetConnectionString("DefaultConnection");
|
|
|
|
// Pomelo MySQL provider
|
|
optionsBuilder.UseMySql(connectionString, new MySqlServerVersion(new Version(8, 0, 21)));
|
|
|
|
return new AppDBContext(optionsBuilder.Options);
|
|
}
|
|
}
|
|
}
|