Добавление индекса в таблицу - PullRequest
9 голосов
/ 18 февраля 2011

У меня есть таблица Person: id, name

У меня часто бывают такие вопросы, как:

select * from Person where name Like "%abc%".

У меня есть 2 вопроса:

  1. Как реализовать этот запрос с использованием кода сначала 5 (CTP5)
  2. Как добавить индекс в столбце имени, чтобы ускорить поиск данных по имени, как в запросе?

Ответы [ 2 ]

23 голосов
/ 18 февраля 2011

Оператор Like можно выполнить с помощью функции Contains:

var query = from p in context.Persons
            where p.Name.Contains("abc")
            select p;

Индекс должен быть добавлен SQL - в EF нет специальной конструкции для создания индекса.Вы можете выполнить этот SQL из инициализации БД.

Сначала вы должны реализовать собственный инициализатор:

public class MyInitializer : CreateDatabaseIfNotExists<MyContext>
{
  protected override void Seed(MyContext context)
  {
    context.Database.SqlCommand("CREATE INDEX IX_Person_Name ON Person (Name)");
  }
}

Затем вы должны зарегистрировать новый инициализатор:

DbDatabase.SetInitializer<MyContext>(new MyInitializer());
0 голосов
/ 31 июля 2017

в EF 6 вы можете создавать такие индексы, как этот

   Property(t => t.TotalValue)
            .HasColumnAnnotation(
                IndexAnnotation.AnnotationName,
                new IndexAnnotation(new IndexAttribute("IX_inventory_import_total_value", 1))
            );
...