DatabaseContext.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using Microsoft.EntityFrameworkCore;
  2. namespace Benchmarks.Model
  3. {
  4. public sealed class DatabaseContext : DbContext
  5. {
  6. private static DbContextOptions<DatabaseContext> _Options;
  7. private static DbContextOptions<DatabaseContext> _NoTrackingOptions;
  8. #region Factory
  9. public static DatabaseContext Create()
  10. {
  11. return new DatabaseContext(_Options ??= GetOptions(true));
  12. }
  13. public static DatabaseContext CreateNoTracking()
  14. {
  15. return new DatabaseContext(_NoTrackingOptions ??= GetOptions(false));
  16. }
  17. private static DbContextOptions<DatabaseContext> GetOptions(bool tracking)
  18. {
  19. var optionsBuilder = new DbContextOptionsBuilder<DatabaseContext>();
  20. optionsBuilder.UseNpgsql("Server=tfb-database;Database=hello_world;User Id=benchmarkdbuser;Password=benchmarkdbpass;Maximum Pool Size=64;NoResetOnClose=true;Enlist=false;Max Auto Prepare=3");
  21. if (!tracking)
  22. {
  23. optionsBuilder.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking);
  24. }
  25. return optionsBuilder.Options;
  26. }
  27. private DatabaseContext(DbContextOptions options) : base(options) { }
  28. #endregion
  29. #region Entities
  30. public DbSet<World> World { get; set; }
  31. public DbSet<Fortune> Fortune { get; set; }
  32. #endregion
  33. }
  34. }