Можно ли использовать несколько индексов с помощью HasColumnAnnotation?
Похоже, в Entity Framework 6.1 они добавили возможность создания табличных индексов с помощью новогоHasColumnAnnotation
метод. Я создал несколько вспомогательных расширений для ускорения процесса:
public static class MappingExtensions
{
public static StringPropertyConfiguration HasIndex(this StringPropertyConfiguration config, bool isUnique = false)
{
return config.HasColumnAnnotation("Index", new IndexAnnotation(new IndexAttribute() { IsUnique = isUnique }));
}
public static StringPropertyConfiguration HasIndex(this StringPropertyConfiguration config, string name, int order = 1, bool isUnique = false)
{
return config.HasColumnAnnotation("Index", new IndexAnnotation(new IndexAttribute(name, order) { IsUnique = isUnique }));
}
public static PrimitivePropertyConfiguration HasIndex(this PrimitivePropertyConfiguration config, bool isUnique = false)
{
return config.HasColumnAnnotation("Index", new IndexAnnotation(new IndexAttribute() { IsUnique = isUnique }));
}
public static PrimitivePropertyConfiguration HasIndex(this PrimitivePropertyConfiguration config, string name, int order = 1, bool isUnique = false)
{
return config.HasColumnAnnotation("Index", new IndexAnnotation(new IndexAttribute(name, order) { IsUnique = isUnique }));
}
}
Это работает фантастически ... пока я не попытаюсь создать второй индекс, который содержит столбец, уже используемый в другом индексе. Все, что я добавлю последним, переписывает оригинал. Кто-нибудь знает, возможно ли в настоящее время добавить несколько индексов в один и тот же столбец с помощью новогоHasColumnAnnotation
доступно наStringPropertyConfiguration
а такжеPrimitivePropertyConfiguration
?
Я могу обойти это, как всегда, вручную добавляя индексы в сценарии миграции, но было бы лучше всего настроить это вEntityTypeConfiguration
сопоставления, чтобы я мог иметь все это в одном месте.
После обратной связи Герца, это то, что я в итоге сделал:
public static class MappingExtensions
{
public static StringPropertyConfiguration HasIndex(this StringPropertyConfiguration config, params IndexAttribute[] indexes)
{
return config.HasColumnAnnotation("Index", new IndexAnnotation(indexes));
}
public static PrimitivePropertyConfiguration HasIndex(this PrimitivePropertyConfiguration config, params IndexAttribute[] indexes)
{
return config.HasColumnAnnotation("Index", new IndexAnnotation(indexes));
}
}
И вот новое использование:
Property(x => x.Name).IsRequired().HasMaxLength(65).HasIndex(new IndexAttribute("IX_Countries_Name") { IsUnique = true }, new IndexAttribute("IX_Countries_Published", 2))