Files
EngineeringSync/EngineeringSync.Infrastructure/AppDbContext.cs

53 lines
1.9 KiB
C#
Raw Normal View History

using EngineeringSync.Domain.Entities;
using Microsoft.EntityFrameworkCore;
namespace EngineeringSync.Infrastructure;
public class AppDbContext(DbContextOptions<AppDbContext> options) : DbContext(options)
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (optionsBuilder.IsConfigured) return;
// WAL-Modus für bessere Nebenläufigkeit zwischen Watcher-Writer und API-Reader
optionsBuilder.UseSqlite(o => o.CommandTimeout(30));
}
public DbSet<ProjectConfig> Projects => Set<ProjectConfig>();
public DbSet<FileRevision> FileRevisions => Set<FileRevision>();
public DbSet<PendingChange> PendingChanges => Set<PendingChange>();
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<ProjectConfig>(e =>
{
e.HasKey(p => p.Id);
e.Property(p => p.Name).IsRequired().HasMaxLength(200);
e.Property(p => p.EngineeringPath).IsRequired();
e.Property(p => p.SimulationPath).IsRequired();
e.Property(p => p.BackupEnabled).HasDefaultValue(true);
e.Property(p => p.BackupPath).HasDefaultValue(null);
e.Property(p => p.MaxBackupsPerFile).HasDefaultValue(0);
});
modelBuilder.Entity<FileRevision>(e =>
{
e.HasKey(r => r.Id);
e.HasIndex(r => new { r.ProjectId, r.RelativePath }).IsUnique();
e.HasOne(r => r.Project)
.WithMany(p => p.FileRevisions)
.HasForeignKey(r => r.ProjectId)
.OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity<PendingChange>(e =>
{
e.HasKey(c => c.Id);
e.HasOne(c => c.Project)
.WithMany(p => p.PendingChanges)
.HasForeignKey(c => c.ProjectId)
.OnDelete(DeleteBehavior.Cascade);
});
}
}