using Microsoft.EntityFrameworkCore; using ProRestaurant.Containers; using ProRestaurant.Models; using ProRestaurant.Models.Accounts; using ProRestaurant.Models.Misc; using ProRestaurant.Models.Restaurants; using System.Linq; namespace ProRestaurant.DBContexts { public class DBContext : DbContext { private string connectionString = ""; private bool UseSQL = false; public DBContext(DbContextOptions options) : base(options) { } #region Accounts public DbSet Users { get; set; } public DbSet DriverDetails { get; set; } public DbSet UserAddresses { get; set; } #endregion #region Restaurants public DbSet Restaurants { get; set; } public DbSet TradingHours { get; set; } public DbSet MenuCategories { get; set; } public DbSet MenuItems { get; set; } public DbSet MenuOptions { get; set; } public DbSet MenuOptionItems { get; set; } public DbSet RestaurantUsers { get; set; } public DbSet RestaurantCategories { get; set; } public DbSet RestaurantRoles { get; set; } public DbSet RestaurantRolePremissions { get; set; } public DbSet RestaurantUserRestaurantRoles { get; set; } #endregion #region Misc public DbSet Locations { get; set; } #endregion public override int SaveChanges() { foreach (var item in ChangeTracker .Entries() .Where(x => x.State == EntityState.Modified || x.State == EntityState.Added) .Select(x => x.Entity) .ToList()) { if (item is BaseObject) { (item as BaseObject).UpdateModified(string.Empty); } } UpdateSoftDeleteStatuses(); return base.SaveChanges(); } private void UpdateSoftDeleteStatuses() { foreach (var entry in ChangeTracker.Entries()) { var props = (from p in entry.CurrentValues.Properties select p.Name).ToList(); if (props.Contains("IsDeleted")) { switch (entry.State) { case EntityState.Added: entry.CurrentValues["IsDeleted"] = false; break; case EntityState.Deleted: entry.State = EntityState.Modified; entry.CurrentValues["IsDeleted"] = true; break; } } } } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity().HasQueryFilter(m => EF.Property(m, "IsDeleted") == false); modelBuilder.Entity().HasQueryFilter(m => EF.Property(m, "IsDeleted") == false); modelBuilder.Entity().HasQueryFilter(m => EF.Property(m, "IsDeleted") == false); modelBuilder.Entity().HasQueryFilter(m => EF.Property(m, "IsDeleted") == false); modelBuilder.Entity().HasQueryFilter(m => EF.Property(m, "IsDeleted") == false); modelBuilder.Entity().HasQueryFilter(m => EF.Property(m, "IsDeleted") == false); modelBuilder.Entity().HasQueryFilter(m => EF.Property(m, "IsDeleted") == false); modelBuilder.Entity().HasQueryFilter(m => EF.Property(m, "IsDeleted") == false); modelBuilder.Entity().HasQueryFilter(m => EF.Property(m, "IsDeleted") == false); modelBuilder.Entity().HasQueryFilter(m => EF.Property(m, "IsDeleted") == false); modelBuilder.Entity().HasQueryFilter(m => EF.Property(m, "IsDeleted") == false); modelBuilder.Entity().HasQueryFilter(m => EF.Property(m, "IsDeleted") == false); modelBuilder.Entity().HasQueryFilter(m => EF.Property(m, "IsDeleted") == false); } } }