using System; using System.IO; using Microsoft.EntityFrameworkCore; using Telemetry.Models; namespace Telemetry; public class AppDbContext : DbContext { public DbSet Logs { get; set; } = null!; public DbSet Users { get; set; } = null!; public AppDbContext() : base() { } public AppDbContext(DbContextOptions options) : base(options) { } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if (!optionsBuilder.IsConfigured) { var dbPath = ModInit.DbPath; var dbDir = Path.GetDirectoryName(dbPath); if (dbDir != null && !Directory.Exists(dbDir)) Directory.CreateDirectory(dbDir); optionsBuilder.UseSqlite($"Data Source={dbPath};Cache=Shared"); optionsBuilder.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking); } } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity() .HasIndex(l => l.Time); modelBuilder.Entity() .HasIndex(l => new { l.Uid, l.Time }); modelBuilder.Entity() .HasIndex(l => new { l.Balancer, l.Time }); modelBuilder.Entity() .HasIndex(l => l.UnfoId); modelBuilder.Entity() .HasKey(u => u.Id); modelBuilder.Entity() .HasIndex(u => u.Ip); } }