using FluentMigrator; using Nop.Core.Domain.Customers; using Nop.Core.Domain.Orders; using Nop.Core.Domain.Topics; namespace Nop.Data.Migrations.UpgradeTo480; [NopSchemaMigration("2024-11-25 00:00:00", "AddIndexesMigration for 4.80.0")] public class AddIndexesMigration : ForwardOnlyMigration { private readonly INopDataProvider _dataProvider; public AddIndexesMigration(INopDataProvider dataProvider) { _dataProvider = dataProvider; } /// /// Collect the UP migration expressions /// public override void Up() { if (!Schema.Table(nameof(Customer)).Index("IX_Customer_Deleted").Exists()) Create.Index("IX_Customer_Deleted") .OnTable(nameof(Customer)) .OnColumn(nameof(Customer.Deleted)).Ascending() .WithOptions().NonClustered(); //#7377 if (!Schema.Table(nameof(Order)).Index("AK_Order_OrderGuid").Exists() && !Schema.Table(nameof(Order)).Constraint("AK_Order_OrderGuid").Exists()) { var orders = _dataProvider.GetTable().GroupBy(p => p.OrderGuid, p => p) .Where(p => p.Count() > 1) .SelectMany(p => p) .ToList(); if (orders.Any()) { foreach (var order in orders) order.OrderGuid = Guid.NewGuid(); _dataProvider.UpdateEntities(orders); } Create.UniqueConstraint("AK_Order_OrderGuid") .OnTable(nameof(Order)) .Column(nameof(Order.OrderGuid)); } //#7296 if (!Schema.Table(nameof(Topic)).Index("IX_Topic_SystemName").Exists()) Create.Index("IX_Topic_SystemName") .OnTable(nameof(Topic)) .OnColumn(nameof(Topic.SystemName)).Ascending() .WithOptions().NonClustered(); } }