首页 文章

如何在Entity Framework Code First中删除表?

提问于
浏览
7

我正在使用Entity Framework和Auto Migrations .

因此,当我向Context添加新模型时,我的数据库会更新并创建新表 .

我想要做的是相反,将表完全从数据库中删除 . 但是,从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 class中删除 Companies 属性 . 但是,它不起作用 .

如果可能,在EF中删除表并使用自动迁移的正确方法是什么?

3 回答

  • 1

    add-migrations命令可创建Migrations文件夹 . 你可以看到包含两种方法的[DateStamp] _InitialCreate.cs文件 . 上和下 . InitialCreate类的Up方法创建与数据模型实体集对应的数据库表,Down方法删除它们 . 通常,当您输入命令以回滚数据库时,将调用Down方法 . 您可以在Down方法中看到DropIndex,DropForeignKey,DropTable语句等语句 .

    如果Emre询问了问题,请在[DateStamp] _InitialCreate.cs类的Down方法中编写DropTable语句,该表将被删除 .

    希望它会有所帮助 .

  • 2

    您应该实现"IDatabaseInitializer"并创建自定义逻辑来执行此操作 . 例如,请访问this

    如果有帮助,请参阅“How do I use Entity Framework in Code First Drop-Create mode?” .

    根据我自己的经验,我通过从VS 2010的Package控制台管理器运行以下语句来完成它

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

    确保选择“您的项目名称空间”作为默认项目 .

  • 1

    AutomaticMigrationDataLossAllowed = true; 添加到Configuration类,它将自动删除表 .

相关问题