9

我有一张桌子Personid, name

我经常有这样的疑问:

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

我有两个问题:

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

2 回答 2

23

Like 运算符可以使用 Contains 函数执行:

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

索引必须由 SQL 添加 - EF 中没有特殊的构造来创建索引。您可以从 DB 初始化执行此 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());
于 2011-02-18T12:23:38.110 回答
2

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

   Property(t => t.TotalValue)
            .HasColumnAnnotation(
                IndexAnnotation.AnnotationName,
                new IndexAnnotation(new IndexAttribute("IX_inventory_import_total_value", 1))
            );
于 2017-07-31T13:32:57.683 回答