7

私はEntity FrameworkとAuto Migrationsを併用しています。Entity Frameworkコードファーストでテーブルを削除する方法は?

コンテキストに新しいモデルを追加すると、データベースが更新され、新しいテーブルが作成されます。

私がしたいことは、データベースからテーブルを完全に削除することです。ただし、Contextクラスから定義を削除しても機能しません。

public class CompanyContext : DbContext 
{ 
    public DbSet<Permission> Permissions { get; set; } 
    public DbSet<Company> Companies { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 
    } 
} 

たとえば、データベースからCompanyテーブルを削除したいとします。これを行うには、プロパティをCompanyContextクラスから削除します。しかし、それは動作していません。

EFでテーブルを削除し、可能であれば自動移行を使用する適切な方法は何ですか?

答えて

1

"IDatabaseInitializer"を実装し、カスタムロジックを作成してこの操作を行う必要があります。たとえば、this

また、「How do I use Entity Framework in Code First Drop-Create mode?」も参照してください。私自身の経験では

、私はVS 2010

update-database -StartupProjectName "Your Project Namespace" -script -Verbose –force 

のパッケージコンソールマネージャから以下のステートメントを使用すると、デフォルトのプロジェクトとして選択し、「あなたのプロジェクトの名前空間」を持っていることを確認し実行することでそれを行っています。

+0

私が知る限り、DropCreateDatabaseAlwaysはデータベース全体を削除し、それを再作成します。その結果、データが失われました。私がしたいのは、単一のテーブルだけを削除することです。 –

+0

次に、モデルを更新し、上記のパッケージマネージャーコンソールコマンドを実行してみませんか? – CodeMad

+1

私はそれをしました。 DbContextクラスからモデルクラスを削除し、モデルファイル自体も削除しました。私は、自動移行で残りを処理するべきだと思った。そうではない。 –

1

AutomaticMigrationDataLossAllowed = true;をConfigurationクラスに追加すると、自動的にテーブルが削除されます。

2

add-migrationsコマンドは、Migrationsフォルダを作成します。 [DateStamp] _InitialCreate.csファイルには2つのメソッドがあります。上下。 InitialCreateクラスのUpメソッドは、データモデルエンティティセットに対応するデータベーステーブルを作成し、Downメソッドはそれらを削除します。通常、データベースをロールバックするコマンドを入力すると、Downメソッドが呼び出されます。 DownメソッドのDropIndex、DropForeignKey、DropTableなどのステートメントを見ることができます。

Emreさんから質問された場合は、[DateStamp] _InitialCreate.csクラスのDownメソッドにDropTable文を記述すると、そのテーブルは削除されます。

うまくいけばうまくいくでしょう。