Search code examples
entity-frameworkentity-framework-ctp5

Adding index to a table


I have a table Person: id, name

I often have queries like:

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

I have 2 questions:

  1. How do I implement this query using code-first 5 (CTP5)
  2. How do I add an index on the name column to make data retrieval faster based on name like in the query?

Solution

  • Like operator can be performed with Contains function:

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

    Index must be added by SQL - there is no special construction in EF to create index. You can execute this SQL from DB initialization.

    First you must implement custom initializer:

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

    Then you must register new initializer:

    DbDatabase.SetInitializer<MyContext>(new MyInitializer());