Есть ли способ создать индекс для свойства / столбца, используя сначала код вместо нового IndexAttribute
?
113
Есть ли способ создать индекс для свойства / столбца, используя сначала код вместо нового IndexAttribute
?
Ответы:
Что ж, 26.10.2017 Entity Framework 6.2 был официально выпущен . Он включает в себя возможность легко определять индексы через Fluent API. О его использовании уже было объявлено в бета-версии 6.2.
Теперь вы можете использовать
HasIndex()
метод, а затемIsUnique()
указать, должен ли он быть уникальным индексом.Просто небольшое сравнение (до / после), пример:
Также можно отметить индекс как кластерный с помощью
.IsClustered()
.РЕДАКТИРОВАТЬ # 1
Добавлен пример для многоколоночного индекса и дополнительная информация о том, как пометить индекс как кластерный.
РЕДАКТИРОВАТЬ # 2
В качестве дополнительной информации, в EF Core 2.1 он точно такой же, как в EF 6.2 сейчас.
Вот ссылка на MS Doc.
источник
new
. Я починю это.В настоящее время нет «первоклассной поддержки» для создания индекса через свободный API, но вы можете сделать это через свободный API, вы можете пометить свойства как имеющие атрибуты из Annotation API. Это позволит вам добавить
Index
атрибут через свободный интерфейс.Вот несколько примеров из рабочего элемента с сайта Issues для EF.
Создайте индекс для одного столбца:
Несколько индексов в одном столбце:
Многоколоночные индексы:
Использование вышеуказанных методов приведет к тому, что
.CreateIndex()
вызовы будут автоматически создаваться для вас в вашейUp()
функции при формировании следующей миграции (или будут автоматически созданы в базе данных, если вы не используете миграции).источник
.Primarykey(x=>x.id,clustered:false)
методеHasAnnotation
метод, но такого метода НЕТ. но я нашел метод, имяHasColumnAnnotation
которого принимает указанные вами параметры. Вам нужно обновить свой ответ или я ошибаюсь?Я создал несколько методов расширения и обернул их в пакет nuget, чтобы сделать это намного проще.
Установите
EntityFramework.IndexingExtensions
пакет nuget.Затем вы можете сделать следующее:
Проект и исходный код здесь . Наслаждайтесь!
источник
IndexAttribute
класс EF не предоставляет этого , поэтому я не могу включить его в свою библиотеку.Без явного имени:
С конкретным именем:
источник
EntityFramework
. он включен в эту сборку. просто запуталась насчет NS.instead of using the new IndexAttribute
вы это заметили?Начиная с EF 6.1 этот атрибут
[Index]
поддерживается.Используйте
[Index(IsUnique = true)]
для уникального индекса.Вот ссылка от Microsoft
источник
[Index("IX_BlogIdAndRating", 2)]
public int Rating { get; set; }
[Index("IX_BlogIdAndRating", 1)]
public int BlogId { get; set; }
Здесь ссылка от MicrosoftEntity Framework 6
И добавьте, используя:
источник
Вы можете использовать аннотацию данных INDEX Code First Data Annotations
источник
Если вы не хотите использовать атрибуты в своих POCO, вы всегда можете сделать это следующим образом:
Вы можете выполнить этот оператор в своем
DbInitializer
производном классе. Однако я не знаю, как это сделать с помощью Fluent API.источник
Я пишу метод расширения для использования в свободном EF, чтобы избежать лишнего кода:
затем используйте это так:
или вот так, если индексу нужны какие-то конфиги:
источник
Вы можете использовать один из этих
// Индексы
или
источник