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:
Joseph Doherty
2026-03-16 19:15:50 -04:00
parent 9bc5a5163f
commit 1996b21961
23 changed files with 4494 additions and 9 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,883 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace ScadaLink.ConfigurationDatabase.Migrations
{
/// <inheritdoc />
public partial class InitialCreate : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "ApiKeys",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Name = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false),
KeyValue = table.Column<string>(type: "nvarchar(500)", maxLength: 500, nullable: false),
IsEnabled = table.Column<bool>(type: "bit", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_ApiKeys", x => x.Id);
});
migrationBuilder.CreateTable(
name: "ApiMethods",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Name = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false),
Script = table.Column<string>(type: "nvarchar(max)", nullable: false),
ApprovedApiKeyIds = table.Column<string>(type: "nvarchar(4000)", maxLength: 4000, nullable: true),
ParameterDefinitions = table.Column<string>(type: "nvarchar(4000)", maxLength: 4000, nullable: true),
ReturnDefinition = table.Column<string>(type: "nvarchar(4000)", maxLength: 4000, nullable: true),
TimeoutSeconds = table.Column<int>(type: "int", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_ApiMethods", x => x.Id);
});
migrationBuilder.CreateTable(
name: "AuditLogEntries",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
User = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false),
Action = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: false),
EntityType = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false),
EntityId = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false),
EntityName = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false),
AfterStateJson = table.Column<string>(type: "nvarchar(max)", nullable: true),
Timestamp = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_AuditLogEntries", x => x.Id);
});
migrationBuilder.CreateTable(
name: "DatabaseConnectionDefinitions",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Name = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false),
ConnectionString = table.Column<string>(type: "nvarchar(4000)", maxLength: 4000, nullable: false),
MaxRetries = table.Column<int>(type: "int", nullable: false),
RetryDelay = table.Column<TimeSpan>(type: "time", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_DatabaseConnectionDefinitions", x => x.Id);
});
migrationBuilder.CreateTable(
name: "DataConnections",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Name = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false),
Protocol = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: false),
Configuration = table.Column<string>(type: "nvarchar(4000)", maxLength: 4000, nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_DataConnections", x => x.Id);
});
migrationBuilder.CreateTable(
name: "ExternalSystemDefinitions",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Name = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false),
EndpointUrl = table.Column<string>(type: "nvarchar(2000)", maxLength: 2000, nullable: false),
AuthType = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: false),
AuthConfiguration = table.Column<string>(type: "nvarchar(4000)", maxLength: 4000, nullable: true),
MaxRetries = table.Column<int>(type: "int", nullable: false),
RetryDelay = table.Column<TimeSpan>(type: "time", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_ExternalSystemDefinitions", x => x.Id);
});
migrationBuilder.CreateTable(
name: "LdapGroupMappings",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
LdapGroupName = table.Column<string>(type: "nvarchar(500)", maxLength: 500, nullable: false),
Role = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_LdapGroupMappings", x => x.Id);
});
migrationBuilder.CreateTable(
name: "NotificationLists",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Name = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_NotificationLists", x => x.Id);
});
migrationBuilder.CreateTable(
name: "SharedScripts",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Name = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false),
Code = table.Column<string>(type: "nvarchar(max)", nullable: false),
ParameterDefinitions = table.Column<string>(type: "nvarchar(4000)", maxLength: 4000, nullable: true),
ReturnDefinition = table.Column<string>(type: "nvarchar(4000)", maxLength: 4000, nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_SharedScripts", x => x.Id);
});
migrationBuilder.CreateTable(
name: "Sites",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Name = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false),
SiteIdentifier = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: false),
Description = table.Column<string>(type: "nvarchar(2000)", maxLength: 2000, nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_Sites", x => x.Id);
});
migrationBuilder.CreateTable(
name: "SmtpConfigurations",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Host = table.Column<string>(type: "nvarchar(500)", maxLength: 500, nullable: false),
Port = table.Column<int>(type: "int", nullable: false),
AuthType = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: false),
Credentials = table.Column<string>(type: "nvarchar(4000)", maxLength: 4000, nullable: true),
TlsMode = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
FromAddress = table.Column<string>(type: "nvarchar(500)", maxLength: 500, nullable: false),
ConnectionTimeoutSeconds = table.Column<int>(type: "int", nullable: false),
MaxConcurrentConnections = table.Column<int>(type: "int", nullable: false),
MaxRetries = table.Column<int>(type: "int", nullable: false),
RetryDelay = table.Column<TimeSpan>(type: "time", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_SmtpConfigurations", x => x.Id);
});
migrationBuilder.CreateTable(
name: "SystemArtifactDeploymentRecords",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
ArtifactType = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: false),
DeployedBy = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false),
DeployedAt = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: false),
PerSiteStatus = table.Column<string>(type: "nvarchar(4000)", maxLength: 4000, nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_SystemArtifactDeploymentRecords", x => x.Id);
});
migrationBuilder.CreateTable(
name: "Templates",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Name = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false),
Description = table.Column<string>(type: "nvarchar(2000)", maxLength: 2000, nullable: true),
ParentTemplateId = table.Column<int>(type: "int", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_Templates", x => x.Id);
table.ForeignKey(
name: "FK_Templates_Templates_ParentTemplateId",
column: x => x.ParentTemplateId,
principalTable: "Templates",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
});
migrationBuilder.CreateTable(
name: "ExternalSystemMethods",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
ExternalSystemDefinitionId = table.Column<int>(type: "int", nullable: false),
Name = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false),
HttpMethod = table.Column<string>(type: "nvarchar(10)", maxLength: 10, nullable: false),
Path = table.Column<string>(type: "nvarchar(2000)", maxLength: 2000, nullable: false),
ParameterDefinitions = table.Column<string>(type: "nvarchar(4000)", maxLength: 4000, nullable: true),
ReturnDefinition = table.Column<string>(type: "nvarchar(4000)", maxLength: 4000, nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_ExternalSystemMethods", x => x.Id);
table.ForeignKey(
name: "FK_ExternalSystemMethods_ExternalSystemDefinitions_ExternalSystemDefinitionId",
column: x => x.ExternalSystemDefinitionId,
principalTable: "ExternalSystemDefinitions",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "NotificationRecipients",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
NotificationListId = table.Column<int>(type: "int", nullable: false),
Name = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false),
EmailAddress = table.Column<string>(type: "nvarchar(500)", maxLength: 500, nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_NotificationRecipients", x => x.Id);
table.ForeignKey(
name: "FK_NotificationRecipients_NotificationLists_NotificationListId",
column: x => x.NotificationListId,
principalTable: "NotificationLists",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "Areas",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
SiteId = table.Column<int>(type: "int", nullable: false),
Name = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false),
ParentAreaId = table.Column<int>(type: "int", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_Areas", x => x.Id);
table.ForeignKey(
name: "FK_Areas_Areas_ParentAreaId",
column: x => x.ParentAreaId,
principalTable: "Areas",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
table.ForeignKey(
name: "FK_Areas_Sites_SiteId",
column: x => x.SiteId,
principalTable: "Sites",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "SiteDataConnectionAssignments",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
SiteId = table.Column<int>(type: "int", nullable: false),
DataConnectionId = table.Column<int>(type: "int", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_SiteDataConnectionAssignments", x => x.Id);
table.ForeignKey(
name: "FK_SiteDataConnectionAssignments_DataConnections_DataConnectionId",
column: x => x.DataConnectionId,
principalTable: "DataConnections",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_SiteDataConnectionAssignments_Sites_SiteId",
column: x => x.SiteId,
principalTable: "Sites",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "SiteScopeRules",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
LdapGroupMappingId = table.Column<int>(type: "int", nullable: false),
SiteId = table.Column<int>(type: "int", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_SiteScopeRules", x => x.Id);
table.ForeignKey(
name: "FK_SiteScopeRules_LdapGroupMappings_LdapGroupMappingId",
column: x => x.LdapGroupMappingId,
principalTable: "LdapGroupMappings",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_SiteScopeRules_Sites_SiteId",
column: x => x.SiteId,
principalTable: "Sites",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "TemplateAlarms",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
TemplateId = table.Column<int>(type: "int", nullable: false),
Name = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false),
Description = table.Column<string>(type: "nvarchar(2000)", maxLength: 2000, nullable: true),
PriorityLevel = table.Column<int>(type: "int", nullable: false),
IsLocked = table.Column<bool>(type: "bit", nullable: false),
TriggerType = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: false),
TriggerConfiguration = table.Column<string>(type: "nvarchar(4000)", maxLength: 4000, nullable: true),
OnTriggerScriptId = table.Column<int>(type: "int", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_TemplateAlarms", x => x.Id);
table.ForeignKey(
name: "FK_TemplateAlarms_Templates_TemplateId",
column: x => x.TemplateId,
principalTable: "Templates",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "TemplateAttributes",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
TemplateId = table.Column<int>(type: "int", nullable: false),
Name = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false),
Value = table.Column<string>(type: "nvarchar(4000)", maxLength: 4000, nullable: true),
DataType = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: false),
IsLocked = table.Column<bool>(type: "bit", nullable: false),
Description = table.Column<string>(type: "nvarchar(2000)", maxLength: 2000, nullable: true),
DataSourceReference = table.Column<string>(type: "nvarchar(500)", maxLength: 500, nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_TemplateAttributes", x => x.Id);
table.ForeignKey(
name: "FK_TemplateAttributes_Templates_TemplateId",
column: x => x.TemplateId,
principalTable: "Templates",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "TemplateCompositions",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
TemplateId = table.Column<int>(type: "int", nullable: false),
ComposedTemplateId = table.Column<int>(type: "int", nullable: false),
InstanceName = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_TemplateCompositions", x => x.Id);
table.ForeignKey(
name: "FK_TemplateCompositions_Templates_ComposedTemplateId",
column: x => x.ComposedTemplateId,
principalTable: "Templates",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
table.ForeignKey(
name: "FK_TemplateCompositions_Templates_TemplateId",
column: x => x.TemplateId,
principalTable: "Templates",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "TemplateScripts",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
TemplateId = table.Column<int>(type: "int", nullable: false),
Name = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false),
IsLocked = table.Column<bool>(type: "bit", nullable: false),
Code = table.Column<string>(type: "nvarchar(max)", nullable: false),
TriggerType = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
TriggerConfiguration = table.Column<string>(type: "nvarchar(4000)", maxLength: 4000, nullable: true),
ParameterDefinitions = table.Column<string>(type: "nvarchar(4000)", maxLength: 4000, nullable: true),
ReturnDefinition = table.Column<string>(type: "nvarchar(4000)", maxLength: 4000, nullable: true),
MinTimeBetweenRuns = table.Column<TimeSpan>(type: "time", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_TemplateScripts", x => x.Id);
table.ForeignKey(
name: "FK_TemplateScripts_Templates_TemplateId",
column: x => x.TemplateId,
principalTable: "Templates",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "Instances",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
TemplateId = table.Column<int>(type: "int", nullable: false),
SiteId = table.Column<int>(type: "int", nullable: false),
AreaId = table.Column<int>(type: "int", nullable: true),
UniqueName = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false),
State = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Instances", x => x.Id);
table.ForeignKey(
name: "FK_Instances_Areas_AreaId",
column: x => x.AreaId,
principalTable: "Areas",
principalColumn: "Id",
onDelete: ReferentialAction.SetNull);
table.ForeignKey(
name: "FK_Instances_Sites_SiteId",
column: x => x.SiteId,
principalTable: "Sites",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
table.ForeignKey(
name: "FK_Instances_Templates_TemplateId",
column: x => x.TemplateId,
principalTable: "Templates",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
});
migrationBuilder.CreateTable(
name: "DeploymentRecords",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
InstanceId = table.Column<int>(type: "int", nullable: false),
Status = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: false),
DeploymentId = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: false),
RevisionHash = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: true),
DeployedBy = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false),
DeployedAt = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: false),
CompletedAt = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: true),
RowVersion = table.Column<byte[]>(type: "rowversion", rowVersion: true, nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_DeploymentRecords", x => x.Id);
table.ForeignKey(
name: "FK_DeploymentRecords_Instances_InstanceId",
column: x => x.InstanceId,
principalTable: "Instances",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
});
migrationBuilder.CreateTable(
name: "InstanceAttributeOverrides",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
InstanceId = table.Column<int>(type: "int", nullable: false),
AttributeName = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false),
OverrideValue = table.Column<string>(type: "nvarchar(4000)", maxLength: 4000, nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_InstanceAttributeOverrides", x => x.Id);
table.ForeignKey(
name: "FK_InstanceAttributeOverrides_Instances_InstanceId",
column: x => x.InstanceId,
principalTable: "Instances",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "InstanceConnectionBindings",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
InstanceId = table.Column<int>(type: "int", nullable: false),
AttributeName = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false),
DataConnectionId = table.Column<int>(type: "int", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_InstanceConnectionBindings", x => x.Id);
table.ForeignKey(
name: "FK_InstanceConnectionBindings_DataConnections_DataConnectionId",
column: x => x.DataConnectionId,
principalTable: "DataConnections",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
table.ForeignKey(
name: "FK_InstanceConnectionBindings_Instances_InstanceId",
column: x => x.InstanceId,
principalTable: "Instances",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateIndex(
name: "IX_ApiKeys_KeyValue",
table: "ApiKeys",
column: "KeyValue",
unique: true);
migrationBuilder.CreateIndex(
name: "IX_ApiKeys_Name",
table: "ApiKeys",
column: "Name",
unique: true);
migrationBuilder.CreateIndex(
name: "IX_ApiMethods_Name",
table: "ApiMethods",
column: "Name",
unique: true);
migrationBuilder.CreateIndex(
name: "IX_Areas_ParentAreaId",
table: "Areas",
column: "ParentAreaId");
migrationBuilder.CreateIndex(
name: "IX_Areas_SiteId_ParentAreaId_Name",
table: "Areas",
columns: new[] { "SiteId", "ParentAreaId", "Name" },
unique: true,
filter: "[ParentAreaId] IS NOT NULL");
migrationBuilder.CreateIndex(
name: "IX_AuditLogEntries_Action",
table: "AuditLogEntries",
column: "Action");
migrationBuilder.CreateIndex(
name: "IX_AuditLogEntries_EntityId",
table: "AuditLogEntries",
column: "EntityId");
migrationBuilder.CreateIndex(
name: "IX_AuditLogEntries_EntityType",
table: "AuditLogEntries",
column: "EntityType");
migrationBuilder.CreateIndex(
name: "IX_AuditLogEntries_Timestamp",
table: "AuditLogEntries",
column: "Timestamp");
migrationBuilder.CreateIndex(
name: "IX_AuditLogEntries_User",
table: "AuditLogEntries",
column: "User");
migrationBuilder.CreateIndex(
name: "IX_DatabaseConnectionDefinitions_Name",
table: "DatabaseConnectionDefinitions",
column: "Name",
unique: true);
migrationBuilder.CreateIndex(
name: "IX_DataConnections_Name",
table: "DataConnections",
column: "Name",
unique: true);
migrationBuilder.CreateIndex(
name: "IX_DeploymentRecords_DeployedAt",
table: "DeploymentRecords",
column: "DeployedAt");
migrationBuilder.CreateIndex(
name: "IX_DeploymentRecords_DeploymentId",
table: "DeploymentRecords",
column: "DeploymentId",
unique: true);
migrationBuilder.CreateIndex(
name: "IX_DeploymentRecords_InstanceId",
table: "DeploymentRecords",
column: "InstanceId");
migrationBuilder.CreateIndex(
name: "IX_ExternalSystemDefinitions_Name",
table: "ExternalSystemDefinitions",
column: "Name",
unique: true);
migrationBuilder.CreateIndex(
name: "IX_ExternalSystemMethods_ExternalSystemDefinitionId_Name",
table: "ExternalSystemMethods",
columns: new[] { "ExternalSystemDefinitionId", "Name" },
unique: true);
migrationBuilder.CreateIndex(
name: "IX_InstanceAttributeOverrides_InstanceId_AttributeName",
table: "InstanceAttributeOverrides",
columns: new[] { "InstanceId", "AttributeName" },
unique: true);
migrationBuilder.CreateIndex(
name: "IX_InstanceConnectionBindings_DataConnectionId",
table: "InstanceConnectionBindings",
column: "DataConnectionId");
migrationBuilder.CreateIndex(
name: "IX_InstanceConnectionBindings_InstanceId_AttributeName",
table: "InstanceConnectionBindings",
columns: new[] { "InstanceId", "AttributeName" },
unique: true);
migrationBuilder.CreateIndex(
name: "IX_Instances_AreaId",
table: "Instances",
column: "AreaId");
migrationBuilder.CreateIndex(
name: "IX_Instances_SiteId_UniqueName",
table: "Instances",
columns: new[] { "SiteId", "UniqueName" },
unique: true);
migrationBuilder.CreateIndex(
name: "IX_Instances_TemplateId",
table: "Instances",
column: "TemplateId");
migrationBuilder.CreateIndex(
name: "IX_LdapGroupMappings_LdapGroupName",
table: "LdapGroupMappings",
column: "LdapGroupName",
unique: true);
migrationBuilder.CreateIndex(
name: "IX_NotificationLists_Name",
table: "NotificationLists",
column: "Name",
unique: true);
migrationBuilder.CreateIndex(
name: "IX_NotificationRecipients_NotificationListId",
table: "NotificationRecipients",
column: "NotificationListId");
migrationBuilder.CreateIndex(
name: "IX_SharedScripts_Name",
table: "SharedScripts",
column: "Name",
unique: true);
migrationBuilder.CreateIndex(
name: "IX_SiteDataConnectionAssignments_DataConnectionId",
table: "SiteDataConnectionAssignments",
column: "DataConnectionId");
migrationBuilder.CreateIndex(
name: "IX_SiteDataConnectionAssignments_SiteId_DataConnectionId",
table: "SiteDataConnectionAssignments",
columns: new[] { "SiteId", "DataConnectionId" },
unique: true);
migrationBuilder.CreateIndex(
name: "IX_Sites_Name",
table: "Sites",
column: "Name",
unique: true);
migrationBuilder.CreateIndex(
name: "IX_Sites_SiteIdentifier",
table: "Sites",
column: "SiteIdentifier",
unique: true);
migrationBuilder.CreateIndex(
name: "IX_SiteScopeRules_LdapGroupMappingId_SiteId",
table: "SiteScopeRules",
columns: new[] { "LdapGroupMappingId", "SiteId" },
unique: true);
migrationBuilder.CreateIndex(
name: "IX_SiteScopeRules_SiteId",
table: "SiteScopeRules",
column: "SiteId");
migrationBuilder.CreateIndex(
name: "IX_SystemArtifactDeploymentRecords_DeployedAt",
table: "SystemArtifactDeploymentRecords",
column: "DeployedAt");
migrationBuilder.CreateIndex(
name: "IX_TemplateAlarms_TemplateId_Name",
table: "TemplateAlarms",
columns: new[] { "TemplateId", "Name" },
unique: true);
migrationBuilder.CreateIndex(
name: "IX_TemplateAttributes_TemplateId_Name",
table: "TemplateAttributes",
columns: new[] { "TemplateId", "Name" },
unique: true);
migrationBuilder.CreateIndex(
name: "IX_TemplateCompositions_ComposedTemplateId",
table: "TemplateCompositions",
column: "ComposedTemplateId");
migrationBuilder.CreateIndex(
name: "IX_TemplateCompositions_TemplateId_InstanceName",
table: "TemplateCompositions",
columns: new[] { "TemplateId", "InstanceName" },
unique: true);
migrationBuilder.CreateIndex(
name: "IX_Templates_Name",
table: "Templates",
column: "Name",
unique: true);
migrationBuilder.CreateIndex(
name: "IX_Templates_ParentTemplateId",
table: "Templates",
column: "ParentTemplateId");
migrationBuilder.CreateIndex(
name: "IX_TemplateScripts_TemplateId_Name",
table: "TemplateScripts",
columns: new[] { "TemplateId", "Name" },
unique: true);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "ApiKeys");
migrationBuilder.DropTable(
name: "ApiMethods");
migrationBuilder.DropTable(
name: "AuditLogEntries");
migrationBuilder.DropTable(
name: "DatabaseConnectionDefinitions");
migrationBuilder.DropTable(
name: "DeploymentRecords");
migrationBuilder.DropTable(
name: "ExternalSystemMethods");
migrationBuilder.DropTable(
name: "InstanceAttributeOverrides");
migrationBuilder.DropTable(
name: "InstanceConnectionBindings");
migrationBuilder.DropTable(
name: "NotificationRecipients");
migrationBuilder.DropTable(
name: "SharedScripts");
migrationBuilder.DropTable(
name: "SiteDataConnectionAssignments");
migrationBuilder.DropTable(
name: "SiteScopeRules");
migrationBuilder.DropTable(
name: "SmtpConfigurations");
migrationBuilder.DropTable(
name: "SystemArtifactDeploymentRecords");
migrationBuilder.DropTable(
name: "TemplateAlarms");
migrationBuilder.DropTable(
name: "TemplateAttributes");
migrationBuilder.DropTable(
name: "TemplateCompositions");
migrationBuilder.DropTable(
name: "TemplateScripts");
migrationBuilder.DropTable(
name: "ExternalSystemDefinitions");
migrationBuilder.DropTable(
name: "Instances");
migrationBuilder.DropTable(
name: "NotificationLists");
migrationBuilder.DropTable(
name: "DataConnections");
migrationBuilder.DropTable(
name: "LdapGroupMappings");
migrationBuilder.DropTable(
name: "Areas");
migrationBuilder.DropTable(
name: "Templates");
migrationBuilder.DropTable(
name: "Sites");
}
}
}

File diff suppressed because it is too large Load Diff