feat(db): migration for ElementDataType + widen attribute Value to nvarchar(max) (idempotent)

This commit is contained in:
Joseph Doherty
2026-06-16 15:22:29 -04:00
parent 8bd8079a7f
commit 4a4b3d677d
5 changed files with 1802 additions and 8 deletions
@@ -0,0 +1,41 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace ZB.MOM.WW.ScadaBridge.ConfigurationDatabase.Migrations
{
/// <inheritdoc />
public partial class AddListAttributeElementType : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
// Idempotent DDL: every statement is guarded so this migration is safe
// to re-run against a partially-migrated DB (the #70 crash-loop lesson).
migrationBuilder.Sql(@"
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE Name='ElementDataType' AND Object_ID=Object_ID('TemplateAttributes'))
ALTER TABLE [TemplateAttributes] ADD [ElementDataType] nvarchar(50) NULL;");
migrationBuilder.Sql(@"
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE Name='ElementDataType' AND Object_ID=Object_ID('InstanceAttributeOverrides'))
ALTER TABLE [InstanceAttributeOverrides] ADD [ElementDataType] nvarchar(50) NULL;");
// ALTER COLUMN is naturally idempotent: re-running widens an already-widened column.
migrationBuilder.Sql("ALTER TABLE [TemplateAttributes] ALTER COLUMN [Value] nvarchar(max) NULL;");
migrationBuilder.Sql("ALTER TABLE [InstanceAttributeOverrides] ALTER COLUMN [OverrideValue] nvarchar(max) NULL;");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
// Idempotent reverse DDL: drop the new columns only if present, then
// restore the value columns to their original nvarchar(4000) width.
migrationBuilder.Sql(@"
IF EXISTS (SELECT 1 FROM sys.columns WHERE Name='ElementDataType' AND Object_ID=Object_ID('TemplateAttributes'))
ALTER TABLE [TemplateAttributes] DROP COLUMN [ElementDataType];");
migrationBuilder.Sql(@"
IF EXISTS (SELECT 1 FROM sys.columns WHERE Name='ElementDataType' AND Object_ID=Object_ID('InstanceAttributeOverrides'))
ALTER TABLE [InstanceAttributeOverrides] DROP COLUMN [ElementDataType];");
migrationBuilder.Sql("ALTER TABLE [TemplateAttributes] ALTER COLUMN [Value] nvarchar(4000) NULL;");
migrationBuilder.Sql("ALTER TABLE [InstanceAttributeOverrides] ALTER COLUMN [OverrideValue] nvarchar(4000) NULL;");
}
}
}
@@ -563,12 +563,15 @@ namespace ZB.MOM.WW.ScadaBridge.ConfigurationDatabase.Migrations
.HasMaxLength(200)
.HasColumnType("nvarchar(200)");
b.Property<string>("ElementDataType")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<int>("InstanceId")
.HasColumnType("int");
b.Property<string>("OverrideValue")
.HasMaxLength(4000)
.HasColumnType("nvarchar(4000)");
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
@@ -1164,6 +1167,10 @@ namespace ZB.MOM.WW.ScadaBridge.ConfigurationDatabase.Migrations
.HasMaxLength(2000)
.HasColumnType("nvarchar(2000)");
b.Property<string>("ElementDataType")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<bool>("IsInherited")
.HasColumnType("bit");
@@ -1182,8 +1189,7 @@ namespace ZB.MOM.WW.ScadaBridge.ConfigurationDatabase.Migrations
.HasColumnType("int");
b.Property<string>("Value")
.HasMaxLength(4000)
.HasColumnType("nvarchar(4000)");
.HasColumnType("nvarchar(max)");
b.HasKey("Id");