53 lines
1.9 KiB
C#
53 lines
1.9 KiB
C#
|
|
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);
|
||
|
|
});
|
||
|
|
}
|
||
|
|
}
|