shoc-backend/Data.SeaHavenIndustries/Migrations/20260713120000_Phase7_ExternalWorkOrderIdUnique.cs
Arthur Bassi 4e32c487d2 fix(migrations): discover Phase7, harden Phase4 indexes, align WO model
Make Phase7 EF-discoverable with idempotent DDL, shrink SiteCode and
InternalWONumber before Phase4 search indexes on this branch, align
MaxLength/Fluent indexes with the snapshot, and add the missing Events
calendar table migration so the model has no pending changes.
2026-07-17 11:10:59 -03:00

63 lines
2.5 KiB
C#

using Data.SeaHavenIndustries;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace Data.SeaHavenIndustries.Migrations
{
/// <inheritdoc />
[DbContext(typeof(ApplicationDbContext))]
[Migration("20260713120000_Phase7_ExternalWorkOrderIdUnique")]
public partial class Phase7_ExternalWorkOrderIdUnique : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
// Idempotent: column may already be nvarchar(450) in some environments.
migrationBuilder.Sql(@"
IF COL_LENGTH('workOrders', 'ExternalWorkOrderId') IS NOT NULL
AND EXISTS (
SELECT 1
FROM sys.columns c
INNER JOIN sys.types t ON c.user_type_id = t.user_type_id
WHERE c.object_id = OBJECT_ID(N'dbo.workOrders')
AND c.name = N'ExternalWorkOrderId'
AND t.name = N'nvarchar'
AND c.max_length = -1)
BEGIN
ALTER TABLE workOrders ALTER COLUMN ExternalWorkOrderId nvarchar(450) NULL;
END
");
migrationBuilder.Sql(@"
IF NOT EXISTS (
SELECT 1 FROM sys.indexes
WHERE name = N'IX_workOrders_ExternalWorkOrderId'
AND object_id = OBJECT_ID(N'dbo.workOrders'))
BEGIN
CREATE UNIQUE INDEX IX_workOrders_ExternalWorkOrderId
ON workOrders (ExternalWorkOrderId)
WHERE [ExternalWorkOrderId] IS NOT NULL AND [ExternalWorkOrderId] <> '';
END
");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.Sql(@"
IF EXISTS (
SELECT 1 FROM sys.indexes
WHERE name = N'IX_workOrders_ExternalWorkOrderId'
AND object_id = OBJECT_ID(N'dbo.workOrders'))
DROP INDEX IX_workOrders_ExternalWorkOrderId ON workOrders;
");
migrationBuilder.Sql(@"
IF COL_LENGTH('workOrders', 'ExternalWorkOrderId') IS NOT NULL
ALTER TABLE workOrders ALTER COLUMN ExternalWorkOrderId nvarchar(max) NULL;
");
}
}
}