7

我正在使用實體框架與自動遷移。如何首先在實體框架代碼中刪除表?

所以,當我添加一個新的模型到我的上下文時,我的數據庫被更新並且新的表被創建。

我想做的是相反的,完全從數據庫中刪除表。但是,從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類刪除Companies屬性。但是,它不起作用。

如果可能,在EF中刪除表並使用自動遷移的正確方法是什麼?

回答

1

您應該實施您的「IDatabaseInitializer」並創建自定義邏輯來執行此操作。例如,請訪問this

另請參閱「How do I use Entity Framework in Code First Drop-Create mode?」,如果有幫助。

在我自己的經驗,我已經從2010年的VS包控制檯管理運行下面的語句

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

請確保您有「您的項目命名空間」默認選擇的項目做到了。

+0

據我所知,DropCreateDatabaseAlways刪除整個數據庫並重新創建它。結果你失去了數據。我想要做的只是放棄單個表。 –

+0

那麼你爲什麼不更新你的模型並運行上面提到的包管理器控制檯命令? – CodeMad

+1

我做到了。我從DbContext類中刪除了模型類,並且我也刪除了模型文件本身。我認爲自動遷移應該處理剩下的事情。不是這樣。 –

1

AutomaticMigrationDataLossAllowed = true;添加到配置類,它會自動刪除表。

2

add-migrations命令創建一個Migrations文件夾。您可以看到[DateStamp] _InitialCreate.cs文件包含兩個方法viz。上和下。 InitialCreate類的Up方法創建與數據模型實體集對應的數據庫表,並使用Down方法刪除它們。通常,當您輸入回滾數據庫的命令時,會調用Down方法。您可以在Down方法中看到諸如DropIndex,DropForeignKey,DropTable語句之類的語句。

如果Emre提出問題,請在[DateStamp] _InitialCreate.cs類的Down方法中寫入DropTable語句,並刪除該表。

希望它會有所幫助。