using DigitalData.EmailProfilerDispatcher.Abstraction.Entities; using DigitalData.UserManager.Domain.Entities; using DigitalData.UserManager.Infrastructure; using DigitalData.UserManager.Infrastructure.Contracts; using EnvelopeGenerator.Domain.Entities; using Microsoft.EntityFrameworkCore; using Group = DigitalData.UserManager.Domain.Entities.Group; using Module = DigitalData.UserManager.Domain.Entities.Module; using DigitalData.EmailProfilerDispatcher; namespace EnvelopeGenerator.Infrastructure { //TODO: Adding EmailOut instead of EmailOut.Abst is not correct for the arch. Re-design EmailPut consedering this. IMailDbContext shoud move to Abstraction layer (hint: in this case using DBSet in abst. will be problem because entity framework will have to be added. public class EGDbContext : DbContext, IUserManagerDbContext, IMailDbContext { public DbSet UserReceivers { get; set; } public DbSet Configs { get; set; } public DbSet EnvelopeReceivers { get; set; } public DbSet Envelopes { get; set; } public DbSet DocumentReceiverElements { get; set; } public DbSet DocumentStatus { get; set; } public DbSet EmailTemplate { get; set; } public DbSet EnvelopeCertificates { get; set; } public DbSet EnvelopeDocument { get; set; } public DbSet EnvelopeHistories { get; set; } public DbSet EnvelopeTypes { get; set; } public DbSet Receivers { get; set; } public DbSet GroupOfUsers { get; set; } public DbSet Groups { get; set; } public DbSet ModuleOfUsers { get; set; } public DbSet Modules { get; set; } public DbSet Users { get; set; } public DbSet UserReps { get; set; } public DbSet EMailOuts { get; set; } public DbSet EnvelopeReceiverReadOnlys { get; set; } public EGDbContext(DbContextOptions options) : base(options) { UserReceivers = Set(); Configs = Set(); EnvelopeReceivers = Set(); Envelopes = Set(); DocumentReceiverElements = Set(); DocumentStatus = Set(); EnvelopeCertificates = Set(); EnvelopeDocument = Set(); EnvelopeHistories = Set(); EnvelopeTypes = Set(); Receivers = Set(); GroupOfUsers = Set(); Groups = Set(); ModuleOfUsers = Set(); Modules = Set(); Users = Set(); UserReps = Set(); EMailOuts = Set(); EnvelopeReceiverReadOnlys = Set(); } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity().HasNoKey(); modelBuilder.Entity() .HasKey(er => new { er.EnvelopeId, er.ReceiverId }); modelBuilder.Entity(); modelBuilder.Entity(); modelBuilder.Entity(); modelBuilder.Entity(); modelBuilder.Entity(); modelBuilder.Entity(); modelBuilder.Entity(); modelBuilder.Entity(); modelBuilder.Entity(); modelBuilder.Entity(); modelBuilder.Entity(); // Configure the one-to-many relationship of Envelope modelBuilder.Entity() .HasMany(e => e.Documents) .WithOne() .HasForeignKey(ed => ed.EnvelopeId); modelBuilder.Entity() .HasMany(e => e.History) .WithOne() .HasForeignKey(eh => eh.EnvelopeId); modelBuilder.Entity() .HasMany(ed => ed.Elements) .WithOne(e => e.Document) .HasForeignKey(e => e.DocumentId); modelBuilder.Entity() .HasOne(dre => dre.Document) .WithMany(ed => ed.Elements) .HasForeignKey(dre => dre.DocumentId); modelBuilder.Entity() .HasOne(eh => eh.Receiver) .WithMany() .HasForeignKey(eh => eh.UserReference) .HasPrincipalKey(e => e.EmailAddress); modelBuilder.Entity() .HasOne(eh => eh.Sender) .WithMany() .HasForeignKey(eh => eh.UserReference) .HasPrincipalKey(e => e.Email); modelBuilder.Entity() .HasOne(erro => erro.Receiver) .WithMany() .HasForeignKey(erro => erro.AddedWho) .HasPrincipalKey(r => r.EmailAddress); // Configure entities to handle database triggers modelBuilder.Entity().ToTable(tb => tb.HasTrigger("TBSIG_ENVELOPE_HISTORY_AFT_INS")); modelBuilder.Entity().ToTable(tb => tb.HasTrigger("TBSIG_ENVELOPE_HISTORY_AFT_INS")); modelBuilder.Entity().ToTable(tb => tb.HasTrigger("TBEMLP_EMAIL_OUT_AFT_INS")); modelBuilder.Entity().ToTable(tb => tb.HasTrigger("TBEMLP_EMAIL_OUT_AFT_UPD")); modelBuilder.Entity().ToTable(tb => tb.HasTrigger("TBSIG_ENVELOPE_RECEIVER_READ_ONLY_UPD")); //configure model builder for user manager tables modelBuilder.ConfigureUserManager(); base.OnModelCreating(modelBuilder); } } }