Entity Framework Core でデータベースをドロップする (データベースの削除) - C#

Entity Framework Core でデータベースをドロップする(テーブルを削除する)コードを紹介します。

概要

Entity Framework Core でデータベースをドロップする場合には、コンテキストオブジェクトのDatabaseプロパティの EnsureDeleted() メソッドを呼び出します。

プログラム1: SQL Serverの例

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

事前準備

データベース(削除しても良い)を準備します。

UI

下図のフォームを作成します。ボタンは[Delete Database]ボタン1つ(button2)を利用します。

コード

下記コードを記述します。
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;
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
iPentec all rights reserverd.