9
我有一個表Person
:id, name
添加索引的表
我經常有這樣的查詢:
select * from Person where name Like "%abc%".
我有2個問題:
- 我如何使用實現這個查詢代碼優先5(CTP5)
- 如何在名稱列上添加一個索引,以便像查詢中那樣根據名稱更快地檢索數據?
我有一個表Person
:id, name
添加索引的表
我經常有這樣的查詢:
select * from Person where name Like "%abc%".
我有2個問題:
Like運算符可以執行具有包含功能:
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());
在EF 6,你可以創建索引,這樣
Property(t => t.TotalValue)
.HasColumnAnnotation(
IndexAnnotation.AnnotationName,
new IndexAnnotation(new IndexAttribute("IX_inventory_import_total_value", 1))
);
我會期待使用`Seed()`接種數據,我認爲sql命令應該在`DbMigration.Up()`中執行。我嘗試在`Up()`方法中訪問dbContext,但沒有運氣,但是我發現有'DbMigration.Sql()`。好像在我的`Up()`中,我可以調用`this.Sql(「CREATE INDEX IX_Person_Name ON Person(Name)」)`。我在正確的軌道? – CallMeLaNN 2012-10-19 08:02:20