using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.Entity; using Disco.Models.Repository; using System.Data.Entity.ModelConfiguration.Conventions; namespace Disco.Data.Repository { public class DiscoDataContext : DbContext { private Lazy _Configuration; public DiscoDataContext() { this._Configuration = new Lazy(() => new Configuration.ConfigurationContext(this)); } public virtual DbSet ConfigurationItems { get; set; } public virtual DbSet DocumentTemplates { get; set; } public virtual DbSet Users { get; set; } public virtual DbSet UserAttachments { get; set; } public virtual DbSet DeviceUserAssignments { get; set; } public virtual DbSet Devices { get; set; } public virtual DbSet DeviceDetails { get; set; } public virtual DbSet DeviceModels { get; set; } public virtual DbSet DeviceProfiles { get; set; } public virtual DbSet DeviceBatches { get; set; } public virtual DbSet DeviceComponents { get; set; } public virtual DbSet DeviceAttachments { get; set; } public virtual DbSet DeviceCertificates { get; set; } public virtual DbSet Jobs { get; set; } public virtual DbSet JobTypes { get; set; } public virtual DbSet JobSubTypes { get; set; } public virtual DbSet JobLogs { get; set; } public virtual DbSet JobAttachments { get; set; } public virtual DbSet JobComponents { get; set; } public virtual DbSet JobMetaWarranties { get; set; } public virtual DbSet JobMetaNonWarranties { get; set; } public virtual DbSet JobMetaInsurances { get; set; } public Configuration.ConfigurationContext DiscoConfiguration { get { return this._Configuration.Value; } } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove(); modelBuilder.Entity().HasMany(m => m.JobSubTypes).WithMany(m => m.DeviceComponents).Map(m => m.ToTable("DeviceComponents_JobSubTypes")); modelBuilder.Entity().HasMany(m => m.JobSubTypes).WithMany(m => m.AttachmentTypes).Map(m => m.ToTable("DocumentTemplates_JobSubTypes")); modelBuilder.Entity().HasMany(m => m.JobSubTypes).WithMany(m => m.Jobs).Map(m => m.ToTable("Jobs_JobSubTypes")); modelBuilder.Entity().HasMany(m => m.Jobs).WithOptional(m => m.User); modelBuilder.Entity().HasMany(m => m.Jobs).WithOptional(m => m.Device); modelBuilder.Entity().Property(DeviceProfile.PropertyAccessExpressions.DistributionTypeDb); } // Hook for Repository Monitor public override int SaveChanges() { int changeCount = 0; // Notify before changes are committed var changes = Monitor.RepositoryMonitor.BeforeSaveChanges(this); changeCount = base.SaveChanges(); if (changes.Length > 0) { // Notify after changes are committed Monitor.RepositoryMonitor.AfterSaveChanges(this, changes); } return changeCount; } } }