Entity Frameworkを利用してレコードを更新する - C#

Entity Frameworkを利用してレコードを更新するコードを紹介します。

概要

Entity Frameworkを利用してレコードを更新する場合は、検索等で取得したレコードのオブジェクトのプロパティの値を変更した後、モデルオブジェクトのSaveChanges() メソッドを呼び出すことでレコードを更新できます。

プログラム例

テーブル

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

データモデルの作成

こちらの記事を参照して、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
iPentec all rights reserverd.