using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using OrdersManagementDataModel.Entities; using TaskScheduler = OrdersManagementDataModel.Entities.TaskScheduler; namespace OrdersManagementDataModel; public class OrdersManagementDbContext : DbContext { public OrdersManagementDbContext(DbContextOptions options) : base(options) { } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { var configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json") .Build(); var connectionString = configuration.GetConnectionString("OrdersManagementConnection"); optionsBuilder.UseSqlServer(connectionString, options => options.CommandTimeout(300)); } public DbSet TaskSchedulers { get; set; } public DbSet TaskSchedulerDetails { get; set; } public DbSet Users { get; set; } public DbSet Roles { get; set; } public DbSet Functions { get; set; } public DbSet UserRoles { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity(entity => { entity.HasKey(e => e.Id); entity.ToTable("TaskScheduler"); entity.Property(e => e.RowPointer).HasDefaultValueSql("newid()"); entity.Property(e => e.CreateDate).HasDefaultValueSql("getdate()"); entity.Property(e => e.ActiveFrom).HasDefaultValueSql("getdate()"); entity.Property(e => e.ActiveUntil).IsRequired(false); }); modelBuilder.Entity(entity => { entity.ToTable("TaskSchedulerDetails"); entity.HasKey(e => e.Id); entity.Property(e => e.Id).ValueGeneratedOnAdd(); entity.Property(e => e.RowPointer) .HasColumnName("RowPointer") .HasColumnType("uniqueidentifier") .HasDefaultValueSql("newid()"); entity.Property(e => e.FkTaskScheduler) .HasColumnName("FkTaskScheduler"); entity.Property(e => e.JobRunDate) .HasColumnName("JobRunDate") .HasDefaultValueSql("getdate()"); entity.Property(e => e.Log) .HasColumnName("Log") .HasColumnType("text"); entity.HasOne(d => d.TaskScheduler) .WithMany(p => p.TaskSchedulerDetails) .HasForeignKey(d => d.FkTaskScheduler) .HasConstraintName("FK_TaskSchedulerDetails_TaskScheduler"); }); modelBuilder.Entity(entity => { entity.ToTable("User"); entity.HasKey(e => e.Id); entity.Property(e => e.Id).HasColumnName("Id"); entity.Property(e => e.Login).HasColumnName("Login").HasMaxLength(50).IsRequired(); entity.Property(e => e.PasswordHash).HasColumnName("PasswordHash").HasMaxLength(256).IsRequired(); entity.Property(e => e.IsTemporaryPassword).HasColumnName("IsTemporaryPassword").IsRequired(); entity.Property(e => e.IsActive).HasColumnName("IsActive").IsRequired(); entity.Property(e => e.ActiveFrom).HasColumnName("ActiveFrom"); entity.Property(e => e.ActiveTo).HasColumnName("ActiveTo"); entity.Property(e => e.Email).HasColumnName("Email").HasMaxLength(100); entity.Property(e => e.FirstName).HasColumnName("FirstName").HasMaxLength(50); entity.Property(e => e.LastName).HasColumnName("LastName").HasMaxLength(50); entity.Property(e => e.CreatedDate).HasColumnName("CreatedDate").IsRequired(); entity.Property(e => e.LastLoginDate).HasColumnName("LastLoginDate"); entity.Property(e => e.FailedLoginAttempts).HasColumnName("FailedLoginAttempts").IsRequired(); entity.Property(e => e.IsLocked).HasColumnName("IsLocked").IsRequired(); entity.Property(e => e.LockoutEndDate).HasColumnName("LockoutEndDate"); entity.Property(e => e.RowPointer).HasColumnName("RowPointer").IsRequired(); }); // Konfiguracja dla Role (już zdefiniowana wcześniej) modelBuilder.Entity(entity => { entity.ToTable("Role"); entity.HasKey(e => e.Id); entity.Property(e => e.Id).HasColumnName("Id"); entity.Property(e => e.Name).HasColumnName("Name").HasMaxLength(50).IsRequired(); entity.Property(e => e.RowPointer).HasColumnName("RowPointer").IsRequired(); }); // Konfiguracja dla Function (już zdefiniowana wcześniej) modelBuilder.Entity(entity => { entity.ToTable("Function"); entity.HasKey(e => e.Id); entity.Property(e => e.Id).HasColumnName("Id"); entity.Property(e => e.RoleId).HasColumnName("RoleId").IsRequired(); entity.Property(e => e.Name).HasColumnName("Name").HasMaxLength(100).IsRequired(); entity.Property(e => e.RowPointer).HasColumnName("RowPointer").IsRequired(); entity.HasOne(e => e.Role) .WithMany() .HasForeignKey(e => e.RoleId) .OnDelete(DeleteBehavior.Cascade) .HasConstraintName("FK_Function_Role"); }); // Konfiguracja dla UserRole modelBuilder.Entity(entity => { entity.ToTable("UserRole"); entity.HasKey(e => new { e.UserId, e.RoleId }); entity.Property(e => e.UserId).HasColumnName("UserId").IsRequired(); entity.Property(e => e.RoleId).HasColumnName("RoleId").IsRequired(); entity.Property(e => e.RowPointer).HasColumnName("RowPointer").IsRequired(); entity.HasOne(e => e.User) .WithMany() .HasForeignKey(e => e.UserId) .OnDelete(DeleteBehavior.Cascade) .HasConstraintName("FK_UserRole_User"); entity.HasOne(e => e.Role) .WithMany() .HasForeignKey(e => e.RoleId) .OnDelete(DeleteBehavior.Cascade) .HasConstraintName("FK_UserRole_Role"); }); } }