Почему не создается индекс для одного из столбцов в связующей таблице(связь многие ко многим)?

Есть проект в котором используется entity framework 6, пытаюсь мигрировать на entity framework core, возникла проблема что создаваемая бд отличается от уже существующей. Пример

public class User: IdentityUser<int>
{
    public virtual ICollection<Handbook> Units {get;set;} = new List<Handbook>();
}

public class Handbook
{
    public virtual ICollection<User> Users {get;set;} = new List<User>();
}

Связь многие ко многим настраивалась так

modelBuilder.Entity<User>()
    .HasMany(x => x.Units)
    .WithMany(x => x.Users)
    .Map(x =>
    {
        x.MapLeftKey("UserId");
        x.MapRightKey("UnitId");
        x.ToTable("UserUnits");
    });

ef 6 генерировал следующую скрипт создания таблицы

CREATE TABLE dbo.UserUnits (
  UserId INT NOT NULL
 ,UnitId INT NOT NULL
 ,CONSTRAINT [PK_dbo.UserUnits] PRIMARY KEY CLUSTERED (UserId, UnitId)
) ON [PRIMARY]
GO

CREATE INDEX IX_UnitId
ON dbo.UserUnits (UnitId)
ON [PRIMARY]
GO

CREATE INDEX IX_UserId
ON dbo.UserUnits (UserId)
ON [PRIMARY]
GO

ALTER TABLE dbo.UserUnits
ADD CONSTRAINT [FK_dbo.UserUnits_dbo.AspNetUsers_UserId] FOREIGN KEY (UserId) REFERENCES dbo.AspNetUsers (Id)
GO

ALTER TABLE dbo.UserUnits
ADD CONSTRAINT [FK_dbo.UserUnits_dbo.Handbooks_UnitId] FOREIGN KEY (UnitId) REFERENCES dbo.Handbooks (Id)
GO

в ef core связь многие ко многим настроил следующим образом

modelBuilder.Entity<User>()
    .HasMany(x => x.Units)
    .WithMany(x => x.Users)
    .UsingEntity(
        "UserUnits",
            l => l.HasOne(typeof(Handbook)).WithMany().HasForeignKey("UnitId").HasPrincipalKey(nameof(Handbook.Id)).OnDelete(DeleteBehavior.NoAction),
            r => r.HasOne(typeof(User)).WithMany().HasForeignKey("UserId").HasPrincipalKey(nameof(User.Id)).OnDelete(DeleteBehavior.NoAction),
            j => j.HasKey("UserId", "UnitId")
     );

ef core сгенерировал следующий скрипт создания таблицы

CREATE TABLE dbo.UserUnits (
  UserId INT NOT NULL
 ,UnitId INT NOT NULL
 ,CONSTRAINT PK_UserUnits PRIMARY KEY CLUSTERED (UserId, UnitId)
) ON [PRIMARY]
GO

CREATE INDEX IX_UserUnits_UnitId
ON dbo.UserUnits (UnitId)
ON [PRIMARY]
GO

ALTER TABLE dbo.UserUnits
ADD CONSTRAINT FK_UserUnits_Handbooks_UnitId FOREIGN KEY (UnitId) REFERENCES dbo.Handbooks (Id)
GO

ALTER TABLE dbo.UserUnits
ADD CONSTRAINT FK_UserUnits_Users_UserId FOREIGN KEY (UserId) REFERENCES dbo.Users (Id)
GO

По какой то причине ef core не создает индекс для поля UserId, я конечно могу в генерируемый скрипт миграции в ручную добавить создание индекса для нужного мне поля

migrationBuilder.CreateIndex(name: "IX_UserUnits_UserId",table: "UserUnits",column: "UserId");

но этот вариант считаю крайним средством, которого хотелось бы избежать из чего возникает следующий вопрос, как заставить ef core создать отсутствующий индекс?

p.s. Знаю вариант про вариант создания промежуточной таблицы через создание UserUnit класса, но по ряду причин его хотелось бы избежать.


Ответы (0 шт):