{"path":"NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs","purpose":"EF Core migration that replaces KnowledgeUnits.SourceId (string) with KnowledgeUnits.EbookId (Guid), adds index and FK to Ebooks, and provides the reverse Down migration.","classification":{"role":"database-config","layer":"data","confidence":0.86,"evidence":["class inherits Microsoft.EntityFrameworkCore.Migrations.Migration (line 9)","Up and Down methods manipulate schema via MigrationBuilder (lines 12-41, 44-70)"]},"className":"FixKnowledgeUnitEbookId","methods":[{"name":"Up","line":12,"endLine":41,"signature":"(migrationBuilder: MigrationBuilder) -> void","purpose":"Apply schema changes: remove SourceId column and index from KnowledgeUnits, add non-nullable EbookId Guid column with default, create index on EbookId, and add FK to Ebooks with cascade delete.","calls":[],"actions":[{"id":"schema-change_14","kind":"mapping","label":"Drop index IX_KnowledgeUnits_SourceId","line":14,"detail":"migrationBuilder.DropIndex(name: \"IX_KnowledgeUnits_SourceId\", table: \"KnowledgeUnits\")","visibility":"detail-only","confidence":0.7},{"id":"schema-change_18","kind":"mapping","label":"Drop column SourceId from KnowledgeUnits","line":18,"detail":"migrationBuilder.DropColumn(name: \"SourceId\", table: \"KnowledgeUnits\")","visibility":"detail-only","confidence":0.7},{"id":"schema-change_22","kind":"mapping","label":"Add column EbookId (uuid, not nullable) with default Guid.Empty","line":22,"detail":"migrationBuilder.AddColumn(name: \"EbookId\", table: \"KnowledgeUnits\", type: \"uuid\", nullable: false, defaultValue: Guid.Empty)","visibility":"detail-only","confidence":0.7},{"id":"schema-change_29","kind":"mapping","label":"Create index IX_KnowledgeUnits_EbookId","line":29,"detail":"migrationBuilder.CreateIndex(name: \"IX_KnowledgeUnits_EbookId\", table: \"KnowledgeUnits\", column: \"EbookId\")","visibility":"detail-only","confidence":0.7},{"id":"schema-change_34","kind":"mapping","label":"Add foreign key FK_KnowledgeUnits_Ebooks_EbookId with cascade delete","line":34,"detail":"migrationBuilder.AddForeignKey(name: \"FK_KnowledgeUnits_Ebooks_EbookId\", table: \"KnowledgeUnits\", column: \"EbookId\", principalTable: \"Ebooks\", principalColumn: \"Id\", onDelete: ReferentialAction.Cascade)","visibility":"detail-only","confidence":0.7},{"id":"return_41","kind":"return","label":"Complete Up migration","line":41,"detail":"Method returns after applying schema changes","visibility":"detail-only","confidence":0.7}]},{"name":"Down","line":44,"endLine":70,"signature":"(migrationBuilder: MigrationBuilder) -> void","purpose":"Revert schema changes applied in Up: remove FK and index on EbookId, drop EbookId column, re-add SourceId string column with constraints and recreate its index.","calls":[],"actions":[{"id":"schema-change_46","kind":"mapping","label":"Drop foreign key FK_KnowledgeUnits_Ebooks_EbookId","line":46,"detail":"migrationBuilder.DropForeignKey(name: \"FK_KnowledgeUnits_Ebooks_EbookId\", table: \"KnowledgeUnits\")","visibility":"detail-only","confidence":0.7},{"id":"schema-change_50","kind":"mapping","label":"Drop index IX_KnowledgeUnits_EbookId","line":50,"detail":"migrationBuilder.DropIndex(name: \"IX_KnowledgeUnits_EbookId\", table: \"KnowledgeUnits\")","visibility":"detail-only","confidence":0.7},{"id":"schema-change_54","kind":"mapping","label":"Drop column EbookId from KnowledgeUnits","line":54,"detail":"migrationBuilder.DropColumn(name: \"EbookId\", table: \"KnowledgeUnits\")","visibility":"detail-only","confidence":0.7},{"id":"schema-change_58","kind":"mapping","label":"Add column SourceId (string, maxLength:128) not nullable with empty default","line":58,"detail":"migrationBuilder.AddColumn(name: \"SourceId\", table: \"KnowledgeUnits\", type: \"character varying(128)\", maxLength: 128, nullable: false, defaultValue: \"\")","visibility":"detail-only","confidence":0.7},{"id":"schema-change_66","kind":"mapping","label":"Create index IX_KnowledgeUnits_SourceId","line":66,"detail":"migrationBuilder.CreateIndex(name: \"IX_KnowledgeUnits_SourceId\", table: \"KnowledgeUnits\", column: \"SourceId\")","visibility":"detail-only","confidence":0.7},{"id":"return_70","kind":"return","label":"Complete Down migration","line":70,"detail":"Method returns after reverting schema changes","visibility":"detail-only","confidence":0.7}]}],"types":[{"name":"FixKnowledgeUnitEbookId","kind":"model","line":9,"purpose":"EF Core Migration class that applies and reverts schema changes to replace SourceId with EbookId on KnowledgeUnits.","fields":[]}],"serviceRegistrations":[],"startupActions":[],"dependencies":[],"patterns":["EF Core Migration","Schema migration"],"domainConcepts":["KnowledgeUnit","Ebook"],"keyDetails":"Up adds a non-nullable Guid EbookId with default Guid.Empty, index, and FK to Ebooks (cascade delete). Down restores previous SourceId string column (varchar(128)) and its index.","orchestrationMethods":[],"typedContracts":[{"name":"FixKnowledgeUnitEbookId","kind":"model","line":9,"fieldCount":0,"evidencePaths":["NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"FixKnowledgeUnitEbookId","line":9,"summary":"model with 0 fields.","confidence":0.8,"evidencePaths":["NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs"]}],"cacheMetadata":{"schemaVersion":2,"analysisVersion":"2026-05-23.cache-v1","contentChecksum":"c05ac7becba0cd01b08d833dcdf1f92d413d7de861d53d1b9c5dd392b6bc482f","sourceByteSize":2387,"analyzedAt":"2026-05-23T16:25:49.748Z","technology":"dotnet"}}