diff --git a/src/Umbraco.Core/Migrations/Upgrade/V_8_6_0/AddDatabaseIndexesMissingOnForeignKeys.cs b/src/Umbraco.Core/Migrations/Upgrade/V_8_6_0/AddDatabaseIndexesMissingOnForeignKeys.cs index 1fcb855eef..6c574bd3c9 100644 --- a/src/Umbraco.Core/Migrations/Upgrade/V_8_6_0/AddDatabaseIndexesMissingOnForeignKeys.cs +++ b/src/Umbraco.Core/Migrations/Upgrade/V_8_6_0/AddDatabaseIndexesMissingOnForeignKeys.cs @@ -1,8 +1,4 @@ -using NPoco; -using System; -using System.Linq; -using Umbraco.Core.Persistence.DatabaseAnnotations; -using Umbraco.Core.Persistence.Dtos; +using Umbraco.Core.Persistence.Dtos; namespace Umbraco.Core.Migrations.Upgrade.V_8_6_0 { @@ -14,40 +10,26 @@ namespace Umbraco.Core.Migrations.Upgrade.V_8_6_0 } + /// + /// Adds an index to the foreign key column parent on DictionaryDto's table + /// if it doesn't already exist + /// public override void Migrate() { - var newIndexes = new[] - { - (typeof(DictionaryDto), nameof(DictionaryDto.Parent)) - }; + var tableInfo = Context.Database.PocoDataFactory.ForType(typeof(DictionaryDto)).TableInfo; + tableInfo.TableName = tableInfo.TableName; + var indexName = "IX_" + tableInfo.TableName + "_Parent"; - foreach (var (type, propertyName) in newIndexes) + if (IndexExists(indexName) == false) { - CreateIndexIfNotExists(type, propertyName); + Create + .Index(indexName) + .OnTable(tableInfo.TableName) + .OnColumn("parent") + .Ascending() + .WithOptions().NonClustered() + .Do(); } } - - private void CreateIndexIfNotExists(Type dto, string propertyName) - { - var property = dto.GetProperty(propertyName); - var indexName = property.GetCustomAttributes(false).OfType().Single().Name; - - if (IndexExists(indexName)) - { - return; - } - - var tableName = dto.GetCustomAttributes(false).Single().Value; - var columnName = property.GetCustomAttributes(false).OfType().Single().Name; - - - Create - .Index(indexName) - .OnTable(tableName) - .OnColumn(columnName) - .Ascending() - .WithOptions().NonClustered() // All newly defined indexes are non-clustered - .Do(); - } } }