DbSet へのオブジェクトの追加方法

DbContext API は EF で使われるオブジェクト郡を便利に利用できるようにした API セットです。

DbSet というのは DbContext から派生したコンテキストクラスにおいて、 オブジェクトの集合を表すクラスです。

例えば、DbSet<Company> Companies と定義すれば、それは Company という POCO の集合を表し、 バックエンドのデータベース (が RDBMS の場合) では、通常 Companies という名前のテーブルが作成されて、 そこに Company オブジェクトの値が格納されます。

方法1: Add メソッド

まず準備として DbContext の派生クラスと、そこに定義する DbSet を用意します。

DbContext から、次のように派生クラスを作成しました。名前は MyDbContext です。

DbSet へのオブジェクトの追加方法

ここで指定した Company は次のような POCO です。

DbSet へのオブジェクトの追加方法

さて、それでは実際に DbSet に値を格納しましょう。

一つ目の方法は、コンテキストクラスにあるコレクションに対して、Add メソッドを使ってオブジェクトを追加する方法です。コードは次のように書きます。

DbSet へのオブジェクトの追加方法

これを実行すると、確かに次のようにデータベースに値が格納されました。

DbSet へのオブジェクトの追加方法

方法 2: オブジェクトのアタッチ

二つ目の方法は DbContext の Entry メソッドを使用する方法です。

Entry メソッドは DbEntityEntry クラスのオブジェクトを返して、この DbContext が持っているエントリーの情報にアクセスできるようにします。

このエントリー情報には、オブジェクトの変更トラッキング情報も含まれており、このトラッキング情報として "Added" (追加された) と書き換えることによって、 そのオブジェクトを追加されたものと認識させることができ、SaveChanges メソッドを呼び出し時に実際にバックエンドのデータストアにオブジェクトの情報が格納されます。

具体的には次のように書きます。

DbSet へのオブジェクトの追加方法

これを実行すると、上記の Add メソッドと同じように値が格納されます。実行結果は次の通り。

DbSet へのオブジェクトの追加方法

先に保存していたデータを削除してから追加したので、Id は 2 になっています。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Web/DB プログラミング徹底解説