Phase 1 WP-1: EF Core DbContext with Fluent API mappings for all 26 entities
ScadaLinkDbContext with 10 configuration classes (Fluent API only), initial migration creating 25 tables, environment-aware migration helper (auto-apply dev, validate-only prod), DesignTimeDbContextFactory, optimistic concurrency on DeploymentRecord. 20 tests verify schema, CRUD, relationships, cascades.
This commit is contained in:
@@ -43,7 +43,10 @@ if (role.Equals("Central", StringComparison.OrdinalIgnoreCase))
|
||||
builder.Services.AddSecurity();
|
||||
builder.Services.AddCentralUI();
|
||||
builder.Services.AddInboundAPI();
|
||||
builder.Services.AddConfigurationDatabase();
|
||||
|
||||
var configDbConnectionString = configuration["ScadaLink:Database:ConfigurationDb"]
|
||||
?? throw new InvalidOperationException("ScadaLink:Database:ConfigurationDb connection string is required for Central role.");
|
||||
builder.Services.AddConfigurationDatabase(configDbConnectionString);
|
||||
|
||||
// Options binding
|
||||
BindSharedOptions(builder.Services, builder.Configuration);
|
||||
@@ -51,6 +54,18 @@ if (role.Equals("Central", StringComparison.OrdinalIgnoreCase))
|
||||
builder.Services.Configure<InboundApiOptions>(builder.Configuration.GetSection("ScadaLink:InboundApi"));
|
||||
|
||||
var app = builder.Build();
|
||||
|
||||
// Apply or validate database migrations (skip when running in test harness)
|
||||
if (!string.Equals(configuration["ScadaLink:Database:SkipMigrations"], "true", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
var isDevelopment = app.Environment.IsDevelopment();
|
||||
using (var scope = app.Services.CreateScope())
|
||||
{
|
||||
var dbContext = scope.ServiceProvider.GetRequiredService<ScadaLinkDbContext>();
|
||||
await MigrationHelper.ApplyOrValidateMigrationsAsync(dbContext, isDevelopment);
|
||||
}
|
||||
}
|
||||
|
||||
app.MapCentralUI();
|
||||
app.MapInboundAPI();
|
||||
await app.RunAsync();
|
||||
|
||||
Reference in New Issue
Block a user