我有一张桌子Person
:id, name
我经常有这样的疑问:
select * from Person where name Like "%abc%".
我有两个问题:
- 如何使用代码优先 5 (CTP5) 实现此查询
- 如何在 name 列上添加索引,以便根据查询中的 name 更快地检索数据?
我有一张桌子Person
:id, name
我经常有这样的疑问:
select * from Person where name Like "%abc%".
我有两个问题:
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());
在 EF 6 中,您可以创建这样的索引
Property(t => t.TotalValue)
.HasColumnAnnotation(
IndexAnnotation.AnnotationName,
new IndexAnnotation(new IndexAttribute("IX_inventory_import_total_value", 1))
);