En Entity Framework 7, ¿qué atributo de propiedad crea primero un índice en el código?

data-annotations entity-framework-core

Pregunta

En Entity Framework 7 (7.0.0-rc1-final), ¿qué propiedad Atributo crea un índice?

Normalmente agregaría un índice a una tabla de SQL para mejorar los tiempos de búsqueda, así que supongo que debo especificar esto en mi clase.

public class Account
{
  [Key]
  [Required]
  public int AccountId { get; set; }

  [Required] <-- How do I make this an Index in Sql Server?
  public int ApplicationUserId { get; set; }
}

Asumo que [Index] lo haría pero esto no se reconoce.

¿Cómo indexo la columna ApplicationUserId?

Respuesta aceptada

Use la API fluida en su clase DbContext:

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Account>()
            .HasIndex(b => b.ApplicationUserId);
    }

Respuesta popular

Aquí hay una solución:

[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]
    public class IndexAttribute : Attribute
    {
    }

protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
foreach (var entity in modelBuilder.Model.GetEntityTypes())
            {
                foreach (var property in entity.GetProperties())
                {
                    if (property.PropertyInfo != null && property.PropertyInfo.GetCustomAttributes<IndexAttribute>().Any())
                    {
                        entity.AddIndex(new[] { property });
                    }
                }
            }
    }



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué