向表中添加索引

时间:2011-02-18 11:35:53

标签: entity-framework entity-framework-ctp5

我有一张表Personid, name

我经常遇到如下问题:

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

我有两个问题:

  1. 如何使用代码优先5(CTP5)
  2. 实现此查询
  3. 如何在名称列上添加索引,以便根据查询中的名称更快地检索数据?

2 个答案:

答案 0 :(得分:23)

可以使用包含函数执行类似运算符:

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());

答案 1 :(得分:0)

在EF 6中,您可以创建像这样的索引

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