You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. using Microsoft.EntityFrameworkCore;
  2. using ProRestaurant.Containers;
  3. using ProRestaurant.Models;
  4. using ProRestaurant.Models.Accounts;
  5. using ProRestaurant.Models.Misc;
  6. using ProRestaurant.Models.Restaurants;
  7. using System.Linq;
  8. namespace ProRestaurant.DBContexts
  9. {
  10. public class DBContext : DbContext
  11. {
  12. private string connectionString = "";
  13. private bool UseSQL = false;
  14. public DBContext(DbContextOptions<DBContext> options)
  15. : base(options)
  16. {
  17. }
  18. #region Accounts
  19. public DbSet<User> Users { get; set; }
  20. public DbSet<DriverDetail> DriverDetails { get; set; }
  21. public DbSet<UserAddress> UserAddresses { get; set; }
  22. #endregion
  23. #region Restaurants
  24. public DbSet<Restaurant> Restaurants { get; set; }
  25. public DbSet<TradingHours> TradingHours { get; set; }
  26. public DbSet<MenuCategory> MenuCategories { get; set; }
  27. public DbSet<MenuItem> MenuItems { get; set; }
  28. public DbSet<MenuOption> MenuOptions { get; set; }
  29. public DbSet<MenuOptionItem> MenuOptionItems { get; set; }
  30. public DbSet<RestaurantUser> RestaurantUsers { get; set; }
  31. public DbSet<RestaurantCategory> RestaurantCategories { get; set; }
  32. public DbSet<RestaurantRole> RestaurantRoles { get; set; }
  33. public DbSet<RestaurantRolePremission> RestaurantRolePremissions { get; set; }
  34. public DbSet<RestaurantUserRestaurantRole> RestaurantUserRestaurantRoles { get; set; }
  35. #endregion
  36. #region Misc
  37. public DbSet<Locations> Locations { get; set; }
  38. #endregion
  39. public override int SaveChanges()
  40. {
  41. foreach (var item in ChangeTracker
  42. .Entries()
  43. .Where(x => x.State == EntityState.Modified || x.State == EntityState.Added)
  44. .Select(x => x.Entity)
  45. .ToList())
  46. {
  47. if (item is BaseObject)
  48. {
  49. (item as BaseObject).UpdateModified(string.Empty);
  50. }
  51. }
  52. UpdateSoftDeleteStatuses();
  53. return base.SaveChanges();
  54. }
  55. private void UpdateSoftDeleteStatuses()
  56. {
  57. foreach (var entry in ChangeTracker.Entries())
  58. {
  59. var props = (from p in entry.CurrentValues.Properties
  60. select p.Name).ToList();
  61. if (props.Contains("IsDeleted"))
  62. {
  63. switch (entry.State)
  64. {
  65. case EntityState.Added:
  66. entry.CurrentValues["IsDeleted"] = false;
  67. break;
  68. case EntityState.Deleted:
  69. entry.State = EntityState.Modified;
  70. entry.CurrentValues["IsDeleted"] = true;
  71. break;
  72. }
  73. }
  74. }
  75. }
  76. protected override void OnModelCreating(ModelBuilder modelBuilder)
  77. {
  78. modelBuilder.Entity<User>().HasQueryFilter(m => EF.Property<bool>(m, "IsDeleted") == false);
  79. modelBuilder.Entity<UserAddress>().HasQueryFilter(m => EF.Property<bool>(m, "IsDeleted") == false);
  80. modelBuilder.Entity<DriverDetail>().HasQueryFilter(m => EF.Property<bool>(m, "IsDeleted") == false);
  81. modelBuilder.Entity<Restaurant>().HasQueryFilter(m => EF.Property<bool>(m, "IsDeleted") == false);
  82. modelBuilder.Entity<TradingHours>().HasQueryFilter(m => EF.Property<bool>(m, "IsDeleted") == false);
  83. modelBuilder.Entity<MenuCategory>().HasQueryFilter(m => EF.Property<bool>(m, "IsDeleted") == false);
  84. modelBuilder.Entity<MenuItem>().HasQueryFilter(m => EF.Property<bool>(m, "IsDeleted") == false);
  85. modelBuilder.Entity<MenuOption>().HasQueryFilter(m => EF.Property<bool>(m, "IsDeleted") == false);
  86. modelBuilder.Entity<MenuOptionItem>().HasQueryFilter(m => EF.Property<bool>(m, "IsDeleted") == false);
  87. modelBuilder.Entity<RestaurantUser>().HasQueryFilter(m => EF.Property<bool>(m, "IsDeleted") == false);
  88. modelBuilder.Entity<RestaurantRole>().HasQueryFilter(m => EF.Property<bool>(m, "IsDeleted") == false);
  89. modelBuilder.Entity<RestaurantRolePremission>().HasQueryFilter(m => EF.Property<bool>(m, "IsDeleted") == false);
  90. modelBuilder.Entity<RestaurantUserRestaurantRole>().HasQueryFilter(m => EF.Property<bool>(m, "IsDeleted") == false);
  91. }
  92. }
  93. }