【问题标题】:How can we delete a column from sql table by using code first approach in EF 6.0?我们如何使用 EF 6.0 中的代码优先方法从 sql 表中删除列?
【发布时间】:2016-01-25 05:39:44
【问题描述】:

我现在错误地在我的数据库中添加了一个名为 doj 的列,如果我想使用代码优先方法从表中删除该列,我应该怎么做。

我已经试过了。

1- 从模型中删除列定义。
2- 已删除迁移历史记录。
3- 添加迁移
4- 更新数据库。

但它仍然没有反映在数据库中吗?我在哪里做错了?

【问题讨论】:

  • 你删除数据库中的迁移表了吗?
  • 只需删除模型中的列并删除迁移表,如果不起作用,只需删除包含该列的表

标签: sql asp.net-mvc entity-framework


【解决方案1】:

不需要删除迁移历史记录。

只需按照以下步骤操作

1: Remove properties from the model.
2: Run 'Enable-Migrations' in package manage console.
3: Next Run 'Add-Migration "MigrationsName"'. if any case it is showing 'The project  tesproject failed to build then build project again.
4: Now run 'Update-Database' 

它会对您的代码产生明显的影响。去MSDN

【讨论】:

    【解决方案2】:

    虽然 Neeraj 的回答是正确的并且在大多数情况下运行良好,但如果该列中包含以前的数据,它将从索引中删除,但数据仍然存在(以及列,就此而言)。

    要完全删除列(和其中的数据),请使用DropColumn() 方法。为此,请创建一个新的迁移 add-migration unwantedColumnCleanup 并在 up() 方法中包含必要的代码,然后是 update-database

    namespace MyDB.Migrations
    {
      using System;
      using System.Data.Entity.Migrations;
    
      public partial class unwantedColumnCleanup : DbMigration
      {
        public override void Up()
        {
            DropColumn("Table", "Column");
        }
    
        public override void Down()
        {
        }
      }
    }
    

    【讨论】:

    • 当您想将代码发布到测试/产品服务器时,它会返回错误,因为其中包含数据。如何忽略它并强制它删除该列?
    【解决方案3】:

    你应该这样做 1-)从模型中删除列定义。 2-)构建你的项目 3-)添加迁移 4-)更新数据库

    您不应删除迁移历史记录。 删除列时要小心,因为您可能会丢失表中的数据。

    【讨论】:

    • 验证项目构建应该是一件轻而易举的事,尽管在看到这个之后,更正了一个不支持 Resharper 工具,然后我的构建成功并且能够更新。
    • 谢谢@Demster
    【解决方案4】:

    在 Asp.net core 中应用迁移(更新数据库)后删除列非常简单。请按照以下步骤操作:

    1. 打开您的模型文件夹并删除与您要删除的列等效的特定属性
    2. 打开您的包管理器控制台并运行“Add-Migration anyMigrationName”
    3. 运行 更新数据库

    刷新您的数据库,您将看到更改。

    【讨论】:

      【解决方案5】:

      别担心,其实我也遇到了同样的问题,你只需要做的就是。

      1:从您为创建该列而添加的类中删除该属性。
      2:在 Visual Studio 中打开包管理器控制台。
      3:您已经启用了迁移,因此无需再次运行它,但由于某种原因,如果您收到启用迁移的消息,只需运行 Enable-Migrations
      4 : 运行 update-database -TargetMigration: "Migration"

      第 4 点中的迁移是您为添加列而添加的迁移的名称。

      希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 2012-03-03
        • 1970-01-01
        • 2012-11-22
        • 2021-06-21
        • 1970-01-01
        • 1970-01-01
        • 2013-01-14
        • 2012-02-06
        相关资源
        最近更新 更多