私はテーブルを持っています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 演算子は、Contains 関数で実行できます。
var query = from p in context.Persons
where p.Name.Contains("abc")
select p;
インデックスは SQL で追加する必要があります。EF には、インデックスを作成するための特別な構造はありません。この SQL は DB 初期化から実行できます。
まず、カスタム初期化子を実装する必要があります:
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))
);