9

私はテーブルを持っていますPerson:id, name

次のようなクエリがよくあります。

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

2 つの質問があります。

  1. コード ファースト 5 (CTP5) を使用してこのクエリを実装するにはどうすればよいですか
  2. 名前列にインデックスを追加して、クエリのように名前に基づいてデータ取得を高速化するにはどうすればよいですか?
4

2 に答える 2

23

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());
于 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 に答える