Entity Framework Core でテーブルを削除する - C#

Entity Framework Core でテーブルを削除するコードを紹介します。

概要

Entity Framework Core でテーブルを削除(ドロップ)する場合には、DROP TABLEのSQL文を実行します。

プログラム例

事前準備

テーブルを作成します。SQL文を実行して作成、またはプログラムから作成します。テーブルの作成手順はこちらの記事も参照してください.

UI

下図のフォームを作成します。[DROP TABLE SQL]ボタン(button3)を利用します。

コード

MyDbContext.cs
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Options;

namespace EntityFrameworkCoreOperateTableSqlServer
{
  public class MyDbContext : DbContext
  {
    public DbSet<MyTable1Rec> MyTable1 { get; set; }
    public DbSet<MyTable2Rec> MyTable2 { 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; }
  }
}
MyTable2Rec.cs
using System;
using System.ComponentModel.DataAnnotations;

namespace EntityFrameworkCoreOperateTableSqlServer
{
  public class MyTable2Rec
  {
    [Key]
    public int id { get; set; }
    public int ProductId { get; set; }
    public int Stock { get; set; }
  }
}
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Storage;

namespace EntityFrameworkCoreCreateTableSqlServer
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }

    private void button3_Click(object sender, EventArgs e)
    {
      MyDbContext cx = new MyDbContext();
      cx.Database.ExecuteSql($"DROP TABLE MyTable1;DROP TABLE MyTable2;");
      textBox1.Text += "DROP TABLE SQLを実行しました。\r\n";
    }
  }
}

解説

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

[DROP TABLE SQL]のbutton3をクリックすると以下のコードを実行します。
  MyDbContext cx = new MyDbContext();

DatabaseプロパティのExecuteSql() メソッドを呼び出し、DROP TABLE SQL文を実行します。詳しくはこちらの記事を参照してください。
  cx.Database.ExecuteSql($"DROP TABLE MyTable1;DROP TABLE MyTable2;");

SQLを実行した旨のメッセージをテキストボックスに表示します。
  textBox1.Text += "DROP TABLE SQLを実行しました。\r\n";

実行結果

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


データベースサーバーにはテーブルが存在している状態です。


[DROP TABLE SQL]ボタンをクリックします。テキストボックスにSQL文が実行された旨のメッセージが表示されます。


データベースサーバーを確認すると、テーブルが削除されたことが確認できます。

補足:再実行した場合

テーブル削除後の状態で、再度[DROP TABLE SQL]ボタンをクリックするとテーブルが存在しないため、次の例外が発生します。
エラーメッセージ
Microsoft.Data.SqlClient.SqlException
  HResult=0x80131904
  Message=テーブル 'MyTable1' を 削除 できません。存在しないか、権限がありません。
テーブル 'MyTable2' を 削除 できません。存在しないか、権限がありません。
  Source=Core Microsoft SqlClient Data Provider


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