EF Core Code First — кластеризованный индекс и столбец идентификаторов

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

Невозможно создать более одного кластеризованного индекса для таблицы «Tenants». Удалите существующий кластерный индекс «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; }
}

Свободный API

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.

Спасибо.


person Arayn    schedule 16.05.2018    source источник
comment
modelBuilder.Entity<Tenant>().HasAlternateKey(t => t.TenantId); //Auto increment modelBuilder.Entity<Tenant>().HasKey(t => t.ClusteredId); будет работать на вас   -  person vivek nuna    schedule 16.05.2018


Ответы (1)


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

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