Entity Frameworkを利用してレコードをデータベースに挿入するコードを紹介します。
概要
Entity Frameworkを利用してレコードをデータベースに挿入するには、レコードのオブジェクトを作成し値を代入して設定した後、モデルオブジェクトのテーブルオブジェクトのAddメソッドを呼び出し引数にオブジェクトを与えて挿入します。挿入を確定するにはモデルオブジェクトのSaveChanges()メソッドを呼び出します。
複数のレコードをまとめて追加する場合には、AddRangeメソッドを利用します。AddRangeメソッドの引数にはレコードオブジェクトの配列やリスト(Ienumerableインターフェイスを持つ型)を与えます。
プログラム例
テーブル
データベースに下記のテーブルを作成します。
ProductAテーブル レコード
id | name | price | category |
1 | Penguin | 500 | Bird |
2 | Bear | 1050 | Mammal |
3 | Duck | 150 | Bird |
4 | Camel | 550 | Mammal |
5 | Owl | 185 | Bird |
6 | Whale | 880 | Mammal |
データモデルの作成
こちらの記事を参照して、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