using EnertechWebAPI.Models; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Hosting; namespace EnertechWebAPI.Data { public class DataContext : DbContext { public DataContext(DbContextOptions options) : base(options) { } public DbSet EnertechUsers => Set(); public DbSet Dashboard => Set(); public DbSet Training => Set(); public DbSet Education => Set(); public DbSet EMobility => Set(); public DbSet Appliances => Set(); public DbSet Family => Set(); public DbSet Community => Set(); public DbSet House => Set(); public DbSet Prices => Set(); public DbSet Wallet => Set(); public DbSet RefreshTokens { get; set; } public DbSet UserTraining => Set(); public DbSet UserAppliance => Set(); public DbSet UserEducation => Set(); public DbSet UserEMobility => Set(); public DbSet UserFamily => Set(); protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity() .HasMany(p => p.Trainings) .WithMany(p => p.EnertechUsers) .UsingEntity( j => j .HasOne(pt => pt.Training) .WithMany(t => t.UserTrainings) .HasForeignKey(pt => pt.TrainingId), j => j .HasOne(pt => pt.EnertechUser) .WithMany(p => p.UserTrainings) .HasForeignKey(pt => pt.userId), j => { j.Property(pt => pt.takeTraining).HasDefaultValueSql("CURRENT_TIMESTAMP"); j.HasKey(t => new { t.userId, t.TrainingId }); }); modelBuilder.Entity() .HasMany(p => p.Appliances) .WithMany(p => p.EnertechUsers) .UsingEntity( j => j .HasOne(pt => pt.Appliance) .WithMany(t => t.UserAppliances) .HasForeignKey(pt => pt.ApplianceId), j => j .HasOne(pt => pt.EnertechUser) .WithMany(p => p.UserAppliances) .HasForeignKey(pt => pt.userId), j => { j.HasKey(t => new { t.userId, t.ApplianceId }); }); modelBuilder.Entity() .HasMany(p => p.Educations) .WithMany(p => p.EnertechUsers) .UsingEntity( j => j .HasOne(pt => pt.Education) .WithMany(t => t.UserEducations) .HasForeignKey(pt => pt.EducationId), j => j .HasOne(pt => pt.EnertechUser) .WithMany(p => p.UserEducations) .HasForeignKey(pt => pt.userId), j => { j.HasKey(t => new { t.userId, t.EducationId }); }); modelBuilder.Entity() .HasMany(p => p.EMobilities) .WithMany(p => p.EnertechUsers) .UsingEntity( j => j .HasOne(pt => pt.EMobility) .WithMany(t => t.UserEMobilites) .HasForeignKey(pt => pt.EMobilityId), j => j .HasOne(pt => pt.EnertechUser) .WithMany(p => p.UserEMobilites) .HasForeignKey(pt => pt.userId), j => { j.HasKey(t => new { t.userId, t.EMobilityId }); }); //modelBuilder.Entity() // .HasMany(b => b.Families) // .WithOne(i => i.UserFamily) // .HasForeignKey("FamilyId"); modelBuilder.Entity(entity => { entity.Property(e => e.ExpiryDate).HasColumnType("smalldatetime"); entity.Property(e => e.TokenHash) .IsRequired() .HasMaxLength(1000); entity.Property(e => e.TokenSalt) .IsRequired() .HasMaxLength(1000); entity.Property(e => e.Ts) .HasColumnType("smalldatetime") .HasColumnName("TS"); entity.HasOne(d => d.EnertechUser) .WithMany(p => p.RefreshTokens) .HasForeignKey(d => d.userId) .OnDelete(DeleteBehavior.ClientSetNull) .HasConstraintName("FK_RefreshToken_User"); entity.ToTable("RefreshToken"); }); } } }