EF Core Code First - кластерный индекс и столбец идентификаторов - PullRequest
0 голосов
/ 16 мая 2018

Я использую EF Core 2.0 для создания таблицы, в которой первичный ключ представляет собой GUID, а кластеризованный индекс представляет собой автоматически увеличивающийся столбец INT.Но я получаю эту ошибку:

Невозможно создать более одного кластеризованного индекса для таблицы «Арендаторы».Удалите существующий кластеризованный индекс PK_Tenants перед созданием другого

Это код для создания сущности и Fluent API.

Tenant.cs

public class Tenant : EntityBase
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ClusteredId { get; set; }
    public new Guid TenantId { get; set; }

    public string TenantCode { get; set; }
}

FluentAPI

protected override void OnModelCreating(ModelBuilder builder)
{
        builder.Entity<Tenant>().HasIndex(c => c.TenantId).ForSqlServerIsClustered(false);
        builder.Entity<Tenant>().HasIndex(c => c.ClusteredId).HasName("ClusteredId").ForSqlServerIsClustered(true);

        base.OnModelCreating(builder);
}

Подскажите, пожалуйста, как устранить эту ошибку и создать первичный ключ для GUID и кластеризованный индекс для автоинкрементного столбца INT.

Спасибо.

1 Ответ

0 голосов
/ 16 мая 2018

Индекс PK не поддерживается явно. В EF Core его можно настроить через KeyBuilder свободный API (обратите внимание на HasKey вместо HasIndex):

    builder.Entity<Tenant>().HasKey(c => c.TenantId).ForSqlServerIsClustered(false);
    builder.Entity<Tenant>().HasIndex(c => c.ClusteredId).HasName("ClusteredId").ForSqlServerIsClustered(true);
...