using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Text; using System.Threading.Tasks; using SharedLibrary.Database.Models; using System.Data.SqlServerCe; using System.Data.Entity.ModelConfiguration.Conventions; namespace SharedLibrary.Database { public class DatabaseContext : DbContext { public DbSet Clients { get; set; } public DbSet Aliases { get; set; } public DbSet AliasLinks { get; set; } public DbSet Penalties { get; set; } public DatabaseContext() : base("DefaultConnection") { System.Data.Entity.Database.SetInitializer(new Initializer()); Configuration.LazyLoadingEnabled = false; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity() .HasRequired(p => p.Offender) .WithMany(c => c.ReceivedPenalties) .HasForeignKey(c => c.OffenderId) .WillCascadeOnDelete(false); modelBuilder.Entity() .HasRequired(p => p.Punisher) .WithMany(c => c.AdministeredPenalties) .HasForeignKey(c => c.PunisherId) .WillCascadeOnDelete(false); modelBuilder.Entity() .HasMany(e => e.Children) .WithRequired(a => a.Link) .HasForeignKey(a => a.LinkId) .WillCascadeOnDelete(true); /* modelBuilder.Entity() .HasIndex(a => new { a.IP, a.Name }) .IsUnique(); modelBuilder.Entity() .HasIndex(p => new { p.Name, p.IPAddress }).IsUnique();*/ modelBuilder.Conventions.Remove(); // todo: custom load DBSets from plugins // https://aleemkhan.wordpress.com/2013/02/28/dynamically-adding-dbset-properties-in-dbcontext-for-entity-framework-code-first/ base.OnModelCreating(modelBuilder); } } }