Entity Frameworkを利用してレコードを更新するコードを紹介します。
概要
Entity Frameworkを利用してレコードを更新する場合は、検索等で取得したレコードのオブジェクトのプロパティの値を変更した後、モデルオブジェクトのSaveChanges() メソッドを呼び出すことでレコードを更新できます。
プログラム例
テーブル
データベースに下記のテーブルを作成します。
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 |
7 | Falcon | 870 | Bird |
データモデルの作成
こちらの記事を参照して、CodeFirst形式でデータモデルを作成します。
UI
下図のUIを作成します。テキストボックスを4つボタンを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 FormUpdate : Form
{
private ModelProductsA model;
private ProductsA item;
public FormUpdate()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
model = new ModelProductsA();
int searchID = Convert.ToInt32(textBox1.Text);
item = model.ProductsA.Single(p => p.id == searchID);
textBox1.Text += item.id.ToString();
textBox2.Text += item.name.Trim();
textBox3.Text += item.price.ToString();
textBox4.Text += item.category.Trim().ToString();
}
private void button2_Click(object sender, EventArgs e)
{
if (item != null) {
item.name = textBox2.Text;
item.price = Convert.ToDecimal(textBox3.Text);
item.category = textBox4.Text;
if (model != null) {
model.SaveChanges();
}
}
}
}
}
解説
button1が編集するレコードの取得、button2が編集内容の確定になります。
button1
button1ではtextBox1に入力されたIDの値のレコードを検索し、フィールドの値をテキストボックスに表示する動作になります。
下記のコードが、textBox1に入力されたIDの値のレコードを検索するコードになります。EntityFrameworkでの検索は
こちらの記事を参照してください。
model = new ModelProductsA();
int searchID = Convert.ToInt32(textBox1.Text);
item = model.ProductsA.Single(p => p.id == searchID);
検索により取得できたレコードオブジェクトのフィールド値をテキストボックスに表示するコードが下記です。
textBox1.Text += item.id.ToString();
textBox2.Text += item.name.Trim();
textBox3.Text += item.price.ToString();
textBox4.Text += item.category.Trim().ToString();
button2
フォームのテキストボックスに入力された値でレコードを更新します。
レコードオブジェクトがnullでないことを確認し、レコードオブジェクトのフィールドプロパティにテキストボックスの値を代入します。レコードの更新はモデルオブジェクトのSaveChanges() メソッドを呼び出して実行します。
if (item != null) {
item.name = textBox2.Text;
item.price = Convert.ToDecimal(textBox3.Text);
item.category = textBox4.Text;
if (model != null) {
model.SaveChanges();
}
}
実行結果
プロジェクトを実行します。下図のウィンドウが表示されます。
はじめに変更するレコードを取得します。IDの欄に "4" を入力し、[button1]をクリックします。
[button1]をクリックするとID=4のレコードが検索され、レコードのフィールドの値がテキストボックスに表示されます。
テキストボックスの値を変更します。今回はpriceのテキストボックスの値を550から920に変更します。
変更ができたら[button2]をクリックします。変更内容がデータベースに反映されます。
データベースのテーブルのレコードを確認します。ID=4のレコードの"price"が 920 に変更できていることが確認できます。
Entity Frameworkを利用してレコードの更新ができました。
著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。
最終更新日: 2024-01-07
作成日: 2019-01-24