Entity Framework Core でデータベースをドロップする(テーブルを削除する)コードを紹介します。
概要
Entity Framework Core でデータベースをドロップする場合には、コンテキストオブジェクトのDatabaseプロパティの EnsureDeleted() メソッドを呼び出します。
プログラム1: SQL Serverの例
Windows Formアプリケーションを作成します。
事前準備
データベース(削除しても良い)を準備します。
UI
下図のフォームを作成します。ボタンは[Delete Database]ボタン1つ(button2)を利用します。
コード
下記コードを記述します。
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");
}
}
}
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;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Storage;
namespace EntityFrameworkCoreCreateDatabaseSqlServer
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
MyDbContext mdc = new MyDbContext();
mdc.Database.EnsureDeleted();
textBox1.Text += "データベースを削除しました。\r\n";
}
}
}
解説
コンテキストオブジェクトを作成します。
MyDbContext mdc = new MyDbContext();
コンテキストオブジェクトのDatabaseプロパティのEnsureDeleted() メソッドを呼び出し、データベースを削除します。
mdc.Database.EnsureDeleted();
実行結果
プロジェクトを実行しまう。下図のウィンドウが表示されます。
[Delete Database]ボタンをクリックします。データベースを削除した旨のメッセージが表示されます。
データベースサーバーでデータベースを確認します。接続文字列で設定したデータベースが削除されていることが確認できます。
プログラム2: SQLiteの例
事前準備
モデルとDbContext、テーブルのレコードを作成します。作成手順は
こちらの記事を参照してください。
UI
下図のフォームを作成します。
今回のプログラムではボタンを1つのみ[Drop Database](button5)を利用します。
コード
以下のコードを記述します。button5 のクリックイベントを実装します。
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Storage;
namespace SimpleEntityFrameworkCoreSqlite
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
private void button5_Click(object sender, EventArgs e)
{
MyContext mc = new MyContext();
mc.Database.EnsureDeleted();
textBox1.Text += "テーブルをドロップしました。";
}
}
}
解説
コンテキストオブジェクトを作成します。
MyContext mc = new MyContext();
コンテキストオブジェクトのDatabaseプロパティのEnsureDeleted() メソッドを呼び出し、テーブルをドロップします。
mc.Database.EnsureDeleted();
実行結果
はじめに作成したテーブルのレコードの値を確認します。
レコードが存在していることが確認できます。
プロジェクトを実行します。下図のウィンドウが表示されます。
[Drop Database]のボタンをクリックします。データベースがドロップされた旨のメッセージが表示されます。
再度、テーブルのレコードを表示する処理を実行します。データベースがドロップされ、テーブルがすべて削除されたため、
テーブルが見つからない旨のエラーが発生します。
以下のエラーメッセージが表示されます。
エラーメッセージ
Microsoft.Data.Sqlite.SqliteException
HResult=0x80004005
Message=SQLite Error 1: 'no such table: Rec'.
Source=Microsoft.Data.Sqlite
Entity Framework Core を利用して、データベースを削除することができました。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2022-11-27
作成日: 2022-11-25