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

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

概要

Entity Frameworkを利用してレコードを更新する場合は、検索で削除するレコードを取得し、モデルオブジェクトのRemove() メソッドを呼び出し引数に削除するレコードオブジェクトを与えるとレコードを削除できます。
または、レコードオブジェクトを作成し、IDに削除するIDを設定し、AttachメソッドとRemoveメソッドを利用して削除することもできます。

プログラム例

テーブル

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

データモデルの作成

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

UI

Windows Formアプリケーションを作成し、下図のUIを作成します。フォームにTextBoxを2つButtonを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 FormDelete : Form
  {
    public FormDelete()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      int targetID = Convert.ToInt32(textBox1.Text);

      ModelProductsA model = new ModelProductsA();
      ProductsA item = model.ProductsA.Single(p => p.id == targetID);

      if (item != null) {
        textBox2.Text = "指定したIDのレコードが見つかりました\r\n";

        model.ProductsA.Remove(item);
        model.SaveChanges();
      }
    }

    private void button2_Click(object sender, EventArgs e)
    {
      int targetID = Convert.ToInt32(textBox1.Text);

      ModelProductsA model = new ModelProductsA();
      ProductsA removeItem = new ProductsA();
      removeItem.id = targetID;
      model.ProductsA.Attach(removeItem);
      model.ProductsA.Remove(removeItem);
      model.SaveChanges();
    }
  }
}

解説

button1

button1は与えられたIDからテーブルを検索し、該当するレコードオブジェクトを取得します。オブジェクトが取得できたら、テーブルオブジェクトのRemove()メソッドを呼び出し、引数に取得したレコードオブジェクトを与えることでレコードを削除します。
レコードの検索はSingleメソッドを利用しています。Singleメソッドの動作の詳細はこちらの記事を参照してください。

button2

button2は与えられたIDから直接レコードオブジェクトを作成します。レコードオブジェクトを作成した場合は、テーブルオブジェクトのAttachメソッドを呼び出し、データモデルに含まれるオブジェクトとして設定します。設定後、テーブルオブジェクトのRemove()メソッドを呼び出し、引数に作成したレコードをオブジェクトを与えて指定したIDのレコードを削除します。

実行結果

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


上部のテキストボックスに削除するレコードのID番号を入力します。今回は"7"を入力します。入力ができたら、[button1]をクリックします。


指定したレコードが見つかった旨のメッセージが表示され、レコードを削除します。


テーブルのレコードを確認します。ID=7のレコードが削除されていることが確認できます。


テキストボックスに削除したいID番号を入力し[button2]をクリックしてもレコードを削除できます。button2の場合は、レコードの検索は実行しないため、指定したレコードが見つかった旨のメッセージは表示されません。


Entity Framework を利用してレコードの削除ができました。

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