Entity Frameworkを利用してレコードを削除するコードを紹介します。
概要
Entity Frameworkを利用してレコードを更新する場合は、検索で削除するレコードを取得し、モデルオブジェクトのRemove() メソッドを呼び出し引数に削除するレコードオブジェクトを与えるとレコードを削除できます。
または、レコードオブジェクトを作成し、IDに削除するIDを設定し、AttachメソッドとRemoveメソッドを利用して削除することもできます。
プログラム例
テーブル
データベースに下記のテーブルを作成します。
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
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