ini
This commit is contained in:
+116
@@ -0,0 +1,116 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user