Files
ERP_Auth_Service/AppDBContext.cs
T
Dhananjaya99 de7b40a147 ini
2026-07-08 11:11:50 +05:30

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