Entity Frameworkを利用してレコードをデータベースに挿入する - C#

Entity Frameworkを利用してレコードをデータベースに挿入するコードを紹介します。

概要

Entity Frameworkを利用してレコードをデータベースに挿入するには、レコードのオブジェクトを作成し値を代入して設定した後、モデルオブジェクトのテーブルオブジェクトのAddメソッドを呼び出し引数にオブジェクトを与えて挿入します。挿入を確定するにはモデルオブジェクトのSaveChanges()メソッドを呼び出します。
複数のレコードをまとめて追加する場合には、AddRangeメソッドを利用します。AddRangeメソッドの引数にはレコードオブジェクトの配列やリスト(Ienumerableインターフェイスを持つ型)を与えます。

プログラム例

テーブル

データベースに下記のテーブルを作成します。
ProductAテーブル レコード
idnamepricecategory
1Penguin500Bird
2Bear1050Mammal
3Duck150Bird
4Camel550Mammal
5Owl185Bird
6Whale880Mammal

データモデルの作成

こちらの記事を参照して、CodeFirst形式でデータモデルを作成します。

UI

下図のUIを作成します。テキストボックス3つとボタンを2つ配置します。

コード

下記のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace EntityFrameworkDBOperationDemo
{
  public partial class FormInsert : Form
  {
    public FormInsert()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      ModelProductsA model = new ModelProductsA();

      ProductsA newpd = new ProductsA();
      newpd.name = textBox1.Text;
      newpd.price = Convert.ToDecimal(textBox2.Text);
      newpd.category = textBox3.Text;

      model.ProductsA.Add(newpd);
      model.SaveChanges();

    }

    private void button2_Click(object sender, EventArgs e)
    {
      ProductsA[] InsertList = new ProductsA[5];

      InsertList[0] = new ProductsA()
      {
        name = "Test-01",
        price = 100,
        category = "Test"
      };

      InsertList[1] = new ProductsA()
      {
        name = "Test-02",
        price = 200,
        category = "Test"
      };

      InsertList[2] = new ProductsA()
      {
        name = "Test-03",
        price = 300,
        category = "Test"
      };

      InsertList[3] = new ProductsA()
      {
        name = "Test-04",
        price = 400,
        category = "Test"
      };

      InsertList[4] = new ProductsA()
      {
        name = "Test-05",
        price = 500,
        category = "Test"
      };

      ModelProductsA model = new ModelProductsA();
      model.ProductsA.AddRange(InsertList);
      model.SaveChanges();

    }
  }
}

解説

button1 : 1つのレコードを挿入する

下記のコードでモデルオブジェクトを作成します。
  ModelProductsA model = new ModelProductsA();

レコードのオブジェクトを作成し、フィールドの値に相当するプロパティに値を代入するのが、下記のコードになります。
  ProductsA newpd = new ProductsA();
  newpd.name = textBox1.Text;
  newpd.price = Convert.ToDecimal(textBox2.Text);
  newpd.category = textBox3.Text;

モデルオブジェクトのテーブルオブジェクトのAddメソッドを呼び出しレコードを挿入します。Addメソッドの引数には先に作成したレコードオブジェクトを与えます。挿入後SaveChanges()メソッドを呼び出し挿入を完了します。
  model.ProductsA.Add(newpd);
  model.SaveChanges();

button2 : 複数のレコードをまとめて挿入する

下記のコードで挿入するレコードオブジェクトの配列を作成しています。今回は5つのレコードをまとめて挿入します。
  ProductsA[] InsertList = new ProductsA[5];

  InsertList[0] = new ProductsA()
  {
    name = "Test-01",
    price = 100,
    category = "Test"
  };
  // .....

下記のコードでモデルオブジェクトを作成します。
  ModelProductsA model = new ModelProductsA();

モデルオブジェクトのテーブルオブジェクトのAddRageメソッドを呼び出しレコードを挿入します。メソッドの引数には先に作成したレコードオブジェクトの配列を与えます。挿入後SaveChanges()メソッドを呼び出し挿入を完了します。
  model.ProductsA.AddRange(InsertList);
  model.SaveChanges();

実行結果

1レコードの挿入

プロジェクトを実行します。下図のウィンドウが表示されます。


テキストボックスに挿入するレコードの値を入力します。今回は下図の値を入力しました。


入力後[button1]をクリックします。完了メッセージなどは実装していないため、例外などが発生しなければ正しく処理されています。


テーブルのレコードを確認します。一番最後のレコードに先ほど入力した値のレコードが追加されていることが確認できます。

複数レコードの挿入

プロジェクトを実行します。下図のウィンドウが表示されます。


テキストボックスには入力せずに[button2]をクリックします。完了メッセージなどは実装していないため、例外などが発生しなければ正しく処理されています。


テーブルのレコードを確認します。コードで記述した5つのレコードが追加されていることが確認できます。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2024-01-07
作成日: 2019-01-24
iPentec all rights reserverd.