在Entity Framework 7中,屬性Attribute首先在代碼中創建索引?

data-annotations entity-framework-core

在Entity Framework 7(7.0.0-rc1-final)中,屬性Attribute創建了一個索引?

我通常會在sql表中添加一個索引以改善查找時間,所以我假設我需要在我的類中指定它?

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; }
}

我假設[Index]會這樣做,但這是不被認可的。

如何索引ApplicationUserId列?

一般承認的答案

在DbContext類中使用fluent API:

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

熱門答案

這是一個解決方法:

[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 });
                    }
                }
            }
    }


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因