DbContextは、エンティティクラスとデータベースの間のブリッジ、あるデータとの相互作用の役割を果たしDbContext、主な役割:
1は、DbContextエンティティへのすべてのエンティティは、データベーステーブルを設定含有(DbSet <TEntity>)。
2、DbContext SQLクエリにLINQツーエンティティクエリおよびデータベースに送信します。
3、変更の追跡は:これは、データベースからのクエリを変更するために各エンティティの後に変更を追跡します。
4、永続データ:これは、データベースへの固体挿入、更新および削除操作に基づいています。
DbContext DbSet
またはDbSetは、エンティティの指定されたタイプのコンテキスト内のすべてのエンティティからのデータベースクエリの種類を指定したすべてのセットのセットを表します。
DbSet一般的な方法
TestDBContext TDB =新しいTestDBContext();
(エンティティ)の追加/ AddRange | リターンを追加 エンティティ |
エンティティにコンテキストを追加し、エンティティへの状態フラグが追加されました tdb.Persons.Add(entityModel)。 |
AsNoTracking <実体> | 読み取り専用に使用される配列は、バッファされ、追跡配列されていないコンテキストを取得します VAR personList = tdb.Persons.AsNoTracking <人>()ToListメソッド<者>()。 |
|
アタッチ(エンティティ) | リターンを追加 エンティティ |
コンテキストエンティティコンテキストに追加します tdb.Persons.Attach(entityModel)。 |
検索(INT) | 対応するIDを返します エンティティ |
主キーによるエンティティ・オブジェクトを取得し、そうでない場合、データベースのコンテキストで、次いでリターンヌル、注記:データベースにエンティティ・オブジェクトが返されるが、まだ書き込まれていないこととの関連で存在します 人personEntity = tdb.Persons.Find(1)。 |
含める | 外部キーを含めるに接続され、即座に実行する必要があります。遅延実行に、ボタンなしの外部接続に参加 。VAR personList = tdb.Persons.Include( "PersonNameの")ToListメソッド<人>(); VAR personList = tdb.Persons.Include(S => s.PersonName).ToList <者>(); |
|
削除/ RemoveRange | 削除retrun エンティティ |
削除インスタンスとインスタンスオブジェクトが削除されたマークに追加されます tdb.Persons.Remove(EntityModel)。 |
sqlqueryの | SQLでコレクションのインスタンスを取得し、コレクションのデフォルトの戻りが追跡されている、あなたはAsNoTracking()フォローフォローを使用することができます 。VAR personEntity = tdb.Persons.SqlQuery( "ID = 1 T_Person SELECT * FROM")FirstOrDefault <者>(); |
EFエンティティでの5つの状態:
1. 取り外さ:エンティティ)がちょうど新しいエンティティとして、コンテキストは(添付に追加することができ、トラッキング範囲の文脈内ではなく、ステータスは変更されません。
2. 変更なし:データベース・エンティティの読み出しと同様に、変更されません。
3. 追加:追加状態フラグは、通常行われている追加/ AddRangeを加えました。新しいオブジェクトがデータベースに記録されていないので、状態を削除回し、変更することはできません。
4. 削除:削除状態を、実行フラグ削除/ RemoveRangeが追加ステータスを変換することができない、削除一般的です。
5. 修飾:エンティティの属性を変更する変更された状態で、この状態になり、状態は、状態を変換することができない追加、削除回転させることができます。
EFの状態を確認する方法
含まれている現在のオブジェクトのためのDbEntityEntryオブジェクトを作成する(必要性を追跡するために):
現在値(現在値)/元の値(生値)/データベース値(データベース内の値)
のみ、以下の3つの値を比較する必要が、修正されている性質を知ることは容易です。
セットcontext.Configuration.AutoDetectChangesEnabled = falseの場合は追跡することはありませんが、デフォルトはtrueです。
あなたはまた、自分自身の状態を指定することができます。