using UserManagement.Data; using Microsoft.AspNetCore.Identity.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; using System; namespace UserManagement.Domain { public class UserContext : IdentityDbContext { public UserContext(DbContextOptions options) : base(options) { } public override DbSet Users { get; set; } public override DbSet Roles { get; set; } public override DbSet UserClaims { get; set; } public override DbSet UserRoles { get; set; } public override DbSet UserLogins { get; set; } public override DbSet RoleClaims { get; set; } public override DbSet UserTokens { get; set; } public DbSet Actions { get; set; } public DbSet Pages { get; set; } public DbSet PageActions { get; set; } public DbSet NLog { get; set; } public DbSet LoginAudits { get; set; } public DbSet AppSettings { get; set; } public DbSet UserAllowedIPs { get; set; } public DbSet Reminders { get; set; } public DbSet ReminderNotifications { get; set; } public DbSet ReminderUsers { get; set; } public DbSet ReminderSchedulers { get; set; } public DbSet HalfYearlyReminders { get; set; } public DbSet QuarterlyReminders { get; set; } public DbSet DailyReminders { get; set; } public DbSet EmailTemplates { get; set; } public DbSet EmailSMTPSettings { get; set; } public DbSet CompanyProfiles { get; set; } public DbSet PageHelpers { get; set; } public DbSet UserNotifications { get; set; } protected override void OnModelCreating(ModelBuilder builder) { base.OnModelCreating(builder); builder.Entity(b => { // Each User can have many UserClaims b.HasMany(e => e.UserClaims) .WithOne(e => e.User) .HasForeignKey(uc => uc.UserId) .IsRequired(); // Each User can have many UserLogins b.HasMany(e => e.UserLogins) .WithOne(e => e.User) .HasForeignKey(ul => ul.UserId) .IsRequired(); // Each User can have many UserTokens b.HasMany(e => e.UserTokens) .WithOne(e => e.User) .HasForeignKey(ut => ut.UserId) .IsRequired(); // Each User can have many entries in the UserRole join table b.HasMany(e => e.UserRoles) .WithOne(e => e.User) .HasForeignKey(ur => ur.UserId) .IsRequired(); }); builder.Entity(b => { // Each Role can have many entries in the UserRole join table b.HasMany(e => e.UserRoles) .WithOne(e => e.Role) .HasForeignKey(ur => ur.RoleId) .IsRequired(); // Each Role can have many associated RoleClaims b.HasMany(e => e.RoleClaims) .WithOne(e => e.Role) .HasForeignKey(rc => rc.RoleId) .IsRequired(); b.HasOne(e => e.CreatedByUser) .WithMany() .HasForeignKey(ur => ur.CreatedBy) .OnDelete(DeleteBehavior.NoAction); b.HasOne(e => e.ModifiedByUser) .WithMany() .HasForeignKey(rc => rc.ModifiedBy) .OnDelete(DeleteBehavior.NoAction); b.HasOne(e => e.DeletedByUser) .WithMany() .HasForeignKey(rc => rc.DeletedBy) .OnDelete(DeleteBehavior.NoAction); }); builder.Entity(b => { b.HasOne(e => e.CreatedByUser) .WithMany() .HasForeignKey(ur => ur.CreatedBy) .OnDelete(DeleteBehavior.NoAction); b.HasOne(e => e.ModifiedByUser) .WithMany() .HasForeignKey(rc => rc.ModifiedBy) .OnDelete(DeleteBehavior.NoAction); b.HasOne(e => e.DeletedByUser) .WithMany() .HasForeignKey(rc => rc.DeletedBy) .OnDelete(DeleteBehavior.NoAction); }); builder.Entity(b => { b.HasOne(e => e.CreatedByUser) .WithMany() .HasForeignKey(ur => ur.CreatedBy) .OnDelete(DeleteBehavior.NoAction); b.HasOne(e => e.ModifiedByUser) .WithMany() .HasForeignKey(rc => rc.ModifiedBy) .OnDelete(DeleteBehavior.NoAction); b.HasOne(e => e.DeletedByUser) .WithMany() .HasForeignKey(rc => rc.DeletedBy) .OnDelete(DeleteBehavior.NoAction); }); builder.Entity(b => { b.HasOne(e => e.CreatedByUser) .WithMany() .HasForeignKey(ur => ur.CreatedBy) .OnDelete(DeleteBehavior.NoAction); b.HasOne(e => e.ModifiedByUser) .WithMany() .HasForeignKey(rc => rc.ModifiedBy) .OnDelete(DeleteBehavior.NoAction); b.HasOne(e => e.DeletedByUser) .WithMany() .HasForeignKey(rc => rc.DeletedBy) .OnDelete(DeleteBehavior.NoAction); }); builder.Entity().HasKey(c => new { c.UserId, c.IPAddress }); builder.Entity(b => { b.HasOne(e => e.CreatedByUser) .WithMany() .HasForeignKey(ur => ur.CreatedBy) .OnDelete(DeleteBehavior.NoAction); b.HasOne(e => e.ModifiedByUser) .WithMany() .HasForeignKey(rc => rc.ModifiedBy) .OnDelete(DeleteBehavior.NoAction); b.HasOne(e => e.DeletedByUser) .WithMany() .HasForeignKey(rc => rc.DeletedBy) .OnDelete(DeleteBehavior.NoAction); }); builder.Entity(b => { b.HasKey(e => new { e.ReminderId, e.UserId }); b.HasOne(e => e.User) .WithMany() .HasForeignKey(ur => ur.UserId) .OnDelete(DeleteBehavior.NoAction); }); builder.Entity(entity => { entity.HasOne(d => d.User) .WithMany(p => p.UserNotifications) .HasForeignKey(d => d.UserId) .OnDelete(DeleteBehavior.NoAction); }); builder.Entity().ToTable("Users"); builder.Entity().ToTable("Roles"); builder.Entity().ToTable("RoleClaims"); builder.Entity().ToTable("UserClaims"); builder.Entity().ToTable("UserLogins"); builder.Entity().ToTable("UserRoles"); builder.Entity().ToTable("UserTokens"); builder.Entity().ToTable("UserNotifications"); builder.DefalutMappingValue(); builder.DefalutDeleteValueFilter(); } } }