DbSet へのオブジェクトの追加方法
DbContext API は EF で使われるオブジェクト郡を便利に利用できるようにした API セットです。
DbSet というのは DbContext から派生したコンテキストクラスにおいて、 オブジェクトの集合を表すクラスです。
例えば、DbSet<Company> Companies と定義すれば、それは Company という POCO の集合を表し、 バックエンドのデータベース (が RDBMS の場合) では、通常 Companies という名前のテーブルが作成されて、 そこに Company オブジェクトの値が格納されます。
方法1: Add メソッド
まず準備として DbContext の派生クラスと、そこに定義する DbSet を用意します。
DbContext から、次のように派生クラスを作成しました。名前は MyDbContext です。
ここで指定した Company は次のような POCO です。
さて、それでは実際に DbSet に値を格納しましょう。
一つ目の方法は、コンテキストクラスにあるコレクションに対して、Add メソッドを使ってオブジェクトを追加する方法です。コードは次のように書きます。
これを実行すると、確かに次のようにデータベースに値が格納されました。
方法 2: オブジェクトのアタッチ
二つ目の方法は DbContext の Entry メソッドを使用する方法です。
Entry メソッドは DbEntityEntry クラスのオブジェクトを返して、この DbContext が持っているエントリーの情報にアクセスできるようにします。
このエントリー情報には、オブジェクトの変更トラッキング情報も含まれており、このトラッキング情報として "Added" (追加された) と書き換えることによって、 そのオブジェクトを追加されたものと認識させることができ、SaveChanges メソッドを呼び出し時に実際にバックエンドのデータストアにオブジェクトの情報が格納されます。
具体的には次のように書きます。
これを実行すると、上記の Add メソッドと同じように値が格納されます。実行結果は次の通り。
先に保存していたデータを削除してから追加したので、Id は 2 になっています。