【问题标题】:Entity Framework - Rebuild Database after deleting table or renaming field实体框架 - 删除表或重命名字段后重建数据库
【发布时间】:2013-08-12 21:34:59
【问题描述】:

我在试图弄清楚如何重建我的数据库时遇到了很多麻烦。 我删除了一个表,然后我运行了这个命令 update-Database -Verbose,它并没有重建我的数据库。

当我有一个表时也是如此,然后我在我的模型 (C#) 中更改了一个列名,然后我想重建我的数据库,以便名称显示在数据库中,当我运行时没有任何反应相同的命令。

如何重建我的数据库?我确定除了 update-Database -Verbose 之外还有命令或其他东西。

我正在使用 Visual Studio express 2012 for Web。

编辑: 找不到能够重建我的数据库的命令,尽管我确实找到了一种简单的方法来做我想做的事。 您可以在模型中删除表或重命名列,它总是会重建您的数据库。在解决方案资源管理器中,您会找到一个显示“显示所有文件”的图标,按下它并打开文件夹 App_Data,在那里您将看到您的数据库文件,删除它并重新运行您的应用程序,它将再次构建数据库,以及您在代码中对模型所做的所有更改。因此,不需要在 Web.config 文件中更改目录和 .mdf 名称的部分。

【问题讨论】:

    标签: entity-framework


    【解决方案1】:

    Update-Database 是 Entity Framework Migrations 包的一部分,它允许您按顺序编写对数据库的更改的脚本。如果没有要处理的迁移,该命令不会自行执行任何操作。如果您使用迁移,则需要先使用Add-Migration myNewMigration 命令,并验证生成的脚本是否有意义。

    如果您不使用迁移,则可以针对上下文类使用更简单的数据库选项,例如 DropCreateDatabaseIfModelChanges()

    您可以尝试的另一件事是运行Update-Database -f 以“强制”运行迁移,即使它已经存在于_MigrationHistory

    【讨论】:

    • 我正在使用迁移。刚刚使用 Add-Migration m1 添加了一个新的迁移,文件里面没有任何东西,只是一个方法 up() 和 down() 里面什么都没有。然后我再次更新数据库 -Verbose 并且数据库资源管理器中的数据库没有任何反应。我不知道这是否正常,但是当我运行我的网站时,通过“不调试就开始”它显示了我删除的表中的信息,那是怎么回事?我目前正在学习 ASP.NET MVC 4,所以这对我来说都是新的。
    • 实际上,当我运行网站时,它显示的信息来自我没有删除的表,所以在这方面,一切正常,但我仍然无法重建我的数据库,无论如何什么。
    • up() 和 down() 内部没有任何内容,这意味着您的 model 没有任何需要更改您的 database的更改>。我们可以在这里澄清一些事情...当您说您删除了一个表时,您的意思是您在数据库资源管理器中删除了它并希望它被您的应用程序放回吗?
    • 是的,我从我的数据库资源管理器中删除了它,因为我认为它会再次“构建”,就像应用程序在我第一次运行它时构建数据库一样。所以是的,我期待它被我的应用程序放回。我已经在 global.aspx 中尝试了一个初始化程序,我在其中插入了:Database.SetInitializer(new DropCreateDatabaseAlways());当我构建我的应用程序时,数据库资源管理器中的数据库仍然没有任何变化。
    • 初始化程序会在你运行应用程序时生效;代码不仅仅由构建处理。至于您的迁移问题,有一个为迁移创建的特殊表,即 _MigrationHistory 表。迁移按其日期顺序运行,并且该运行被添加到历史表中。即使更改了数据库,如果 _MigrationHistory 中存在特定的迁移,也不会再次运行它。
    猜你喜欢
    • 2015-03-28
    • 2014-10-02
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    • 2022-08-21
    • 1970-01-01
    相关资源
    最近更新 更多