PosAppDbContext.cs 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. using Edge.Core.Database.Models;
  2. using Gateway.POS.Models;
  3. using Microsoft.EntityFrameworkCore;
  4. namespace Gateway.POS
  5. {
  6. public class PosAppDbContext : DbContext
  7. {
  8. private DbContextOptions options;
  9. public PosAppDbContext() : base()
  10. {
  11. }
  12. //public AppDbContext(DbContextOptions options) : base(options) { this.options = options; }
  13. protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
  14. {
  15. optionsBuilder.UseSqlite("Data Source=Gateway_Pos_App_database.db");
  16. }
  17. protected override void OnModelCreating(ModelBuilder modelBuilder)
  18. {
  19. modelBuilder.Entity<Transaction>().HasIndex(p => new { p.Id }).IsUnique(true);
  20. modelBuilder.Entity<Transaction>().HasIndex(p => new { p.ReceiptId }).IsUnique(true);
  21. modelBuilder.Entity<Transaction>().HasIndex(p => new { p.ShiftId }).IsUnique(false);
  22. modelBuilder.Entity<Transaction>().HasIndex(p => new { p.ServerSideTimestamp }).IsUnique(false);
  23. modelBuilder.Entity<Transaction>().HasIndex(p => new { p.TotalAmount }).IsUnique(false);
  24. modelBuilder.Entity<Transaction>().HasIndex(p => new { p.NetAmount }).IsUnique(false);
  25. modelBuilder.Entity<FuelItem>().HasIndex(p => new { p.Amount }).IsUnique(false);
  26. modelBuilder.Entity<FuelItem>().HasIndex(p => new { p.FuelProductCode }).IsUnique(false);
  27. modelBuilder.Entity<FuelItem>().HasIndex(p => new { p.SiteLevelNozzleId }).IsUnique(false);
  28. modelBuilder.Entity<FuelItem>().HasIndex(p => new { p.PumpId, p.NozzleLogicalId }).IsUnique(false);
  29. modelBuilder.Entity<Operator>().HasIndex(p => new { p.Name }).IsUnique(true);
  30. modelBuilder.Entity<MembershipAccount>().HasIndex(p => new { p.Name, p.CompanyName, p.PhoneNumber }).IsUnique(false);
  31. modelBuilder.Entity<MembershipSubAccountIdentity>().HasIndex(p => new { p.MembershipSubAccountId, p.Identity, p.IdentityCarrierType }).IsUnique(true);
  32. modelBuilder.Entity<MembershipTag>().HasIndex(p => new { p.Name }).IsUnique(true);
  33. modelBuilder.Entity<MembershipAccount_M2M_MembershipTag>().HasKey(p => new { p.MembershipTagId, p.MembershipAccountId });
  34. modelBuilder.Entity<MembershipSubAccount_M2M_MembershipTag>().HasKey(p => new { p.MembershipTagId, p.MembershipSubAccountId });
  35. #region otherwise, sqlite does not support Sum on decimal columns, so here underlying use double.
  36. modelBuilder.Entity<Transaction>().Property(e => e.TotalAmount).HasConversion<double>();
  37. modelBuilder.Entity<Transaction>().Property(e => e.NetAmount).HasConversion<double>();
  38. modelBuilder.Entity<Gateway.POS.Models.Payment>().Property(e => e.ExpectAmount).HasConversion<double>();
  39. modelBuilder.Entity<Gateway.POS.Models.Payment>().Property(e => e.PaidAmount).HasConversion<double>();
  40. modelBuilder.Entity<FuelItem>().Property(e => e.Qualtity).HasConversion<double>();
  41. modelBuilder.Entity<FuelItem>().Property(e => e.Amount).HasConversion<double>();
  42. modelBuilder.Entity<FuelItem>().Property(e => e.Price).HasConversion<double>();
  43. modelBuilder.Entity<FuelItem>().Property(e => e.TotalVolume).HasConversion<double>();
  44. modelBuilder.Entity<MembershipProfitAccount>().Property(e => e.Balance).HasConversion<double>();
  45. modelBuilder.Entity<MembershipProfitAccountRecharge>().Property(e => e.RechargeAmount).HasConversion<double>();
  46. modelBuilder.Entity<MembershipProfitAccountRedeem>().Property(e => e.RedeemedProfitAmount).HasConversion<double>();
  47. #endregion
  48. modelBuilder.Entity<MembershipAccount_M2M_MembershipTag>()
  49. .HasOne(at => at.Account)
  50. .WithMany(acct => acct.AccountTags)
  51. .HasForeignKey(at => at.MembershipAccountId);
  52. modelBuilder.Entity<MembershipSubAccount_M2M_MembershipTag>()
  53. .HasOne(at => at.SubAccount)
  54. .WithMany(subAcct => subAcct.SubAccountTags)
  55. .HasForeignKey(at => at.MembershipSubAccountId);
  56. modelBuilder.Entity<Transaction>().HasOne(t => t.MembershipProfitAccountRecharge).WithOne(r => r.SourceTrx)
  57. .HasForeignKey<MembershipProfitAccountRecharge>(b => b.SourceTrxId);
  58. modelBuilder.Entity<Transaction>().HasOne(t => t.MembershipProfitAccountRedeem).WithOne(r => r.SourceTrx)
  59. .HasForeignKey<MembershipProfitAccountRedeem>(b => b.SourceTrxId);
  60. }
  61. public DbSet<Gateway.POS.Models.Transaction> Transactions { get; set; }
  62. public DbSet<Gateway.POS.Models.Discount> Discounts { get; set; }
  63. public DbSet<Gateway.POS.Models.FuelItem> FuelItems { get; set; }
  64. public DbSet<Gateway.POS.Models.Payment> Payments { get; set; }
  65. public DbSet<Gateway.POS.Models.Operator> Operators { get; set; }
  66. public DbSet<Gateway.POS.Models.MembershipAccount> MembershipAccounts { get; set; }
  67. public DbSet<Gateway.POS.Models.MembershipSubAccountIdentity> MembershipSubAccountIdentities { get; set; }
  68. public DbSet<Gateway.POS.Models.MembershipSubAccount> MembershipSubAccounts { get; set; }
  69. public DbSet<Gateway.POS.Models.MembershipProfitAccount> MembershipProfitAccounts { get; set; }
  70. public DbSet<Gateway.POS.Models.MembershipProfitAccountRecharge> MembershipProfitAccountRecharges { get; set; }
  71. public DbSet<Gateway.POS.Models.MembershipProfitAccountRedeem> MembershipProfitAccountRedeems { get; set; }
  72. public DbSet<Gateway.POS.Models.MembershipTag> MembershipTags { get; set; }
  73. public DbSet<Gateway.POS.Models.MembershipAccount_M2M_MembershipTag> MembershipAccount_M2M_MembershipTags { get; set; }
  74. public DbSet<Gateway.POS.Models.MembershipSubAccount_M2M_MembershipTag> MembershipSubAccount_M2M_MembershipTags { get; set; }
  75. }
  76. }