DatabaseContext.cs 1.3 KB

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