Entity Framework Core でテーブルのレコードを更新する - C#

Entity Framework Core でテーブルのレコードを更新するコードを紹介します。

概要

Entity Framework Core でテーブルのレコードを更新する場合は、Updateメソッドを呼び出します。

プログラム例

Windows Formアプリケーションを作成します。

事前準備

テーブルとレコードの挿入をします。手順の詳細はこちらの記事を参照してください。

UI

下図のフォームを作成します。今回のデモでは、[Edit Record]ボタンのみを利用します。

コード

以下のコードを記述します。
MyDbContext.cs
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Options;

namespace EntityFrameworkCoreOperateTableSqlServer
{
  public class MyDbContext : DbContext
  {
    public DbSet<MyTable1Rec> MyTable1 { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder options)
    {
      options.UseSqlServer("Data Source=(DBホスト名またはIPアドレス);Initial Catalog=iPentecSandBox3;User ID=(ユーザーID);Password=(パスワード);Encrypt=False");
    }
  }
}
MyTable1Rec.cs
using System;

namespace EntityFrameworkCoreOperateTableSqlServer
{
  public class MyTable1Rec
  {
    public int id { get; set; }
    public string Name { get; set; }
    public string Category { get; set; }
    public string Code { get; set; }
    public int Price { get; set; }
  }
}
using Microsoft.EntityFrameworkCore;

namespace EntityFrameworkCoreOperateTableSqlServer
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {

    }

    private void button3_Click(object sender, EventArgs e)
    {
      MyDbContext cx = new MyDbContext();
      MyTable1Rec mtr = cx.MyTable1.Single<MyTable1Rec>(item => item.id == 3);

      mtr.Price = 200;

      cx.MyTable1.Update(mtr);
      cx.SaveChanges();
      textBox1.Text += "レコードを更新しました。\r\n";
    }
  }
}

解説

データベースコンテキストやテーブルのモデルクラスについてはこちらの記事を参照してください。

[Edit Record]のbutton3をクリックすると以下のコードを実行します。

データベースコンテキストオブジェクトを取得します。
  MyDbContext cx = new MyDbContext();

編集するレコードの情報をテーブルから取得します。今回はidの値が3のレコードを取得します。
レコードの情報は、Singleメソッドの戻ち値のMyTable1Rec オブジェクトに代入されます。
  MyTable1Rec mtr = cx.MyTable1.Single<MyTable1Rec>(item => item.id == 3);

MyTable1Rec オブジェクトのメンバ変数に新しい値を代入します。今回のコー例では、Priceの値を 200に変更します。
  mtr.Price = 200;

Updateメソッドを呼び出し、レコードを更新します。
  cx.MyTable1.Update(mtr);

データベースコンテキストオブジェクトの、SaveChanges メソッドを呼び出し変更内容をデータベースに反映します。
  cx.SaveChanges();

実行結果

事前にレコードの値を確認します。id=3 の Price の値は320であることがわかります。


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


[Edit Record]ボタンをクリックします。レコードを変更した旨のメッセージがテキストボックスに表示されます。


レコードの内容を確認します。id=3 の Price の値が 200 に変更されたことが確認できます。


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