【问题标题】:Recreate table if it is manually deleted如果手动删除,则重新创建表
【发布时间】:2015-08-26 16:53:25
【问题描述】:

本周我们遇到了一位客户的问题,他使用 Management Studio 从实体框架数据库中手动删除了一个表。当他们运行我们的软件应用程序时,由于表不存在,它会抛出异常。框架不会重新创建表,因为它存在于 MigrationHistory 表中。如果我从迁移历史记录中删除相应的行,实体框架将重新创建表。

我们希望能够捕捉到这个特定异常,并让实体框架有办法在表不存在时重新创建表,而无需删除迁移历史记录中的相应行。是否有针对特定上下文的设置允许我们这样做?在这种特殊情况下,数据丢失并不重要,因为该表是我们用于临时跟踪的东西,因此如果它不存在重新创建它不会对现有数据造成风险。

非常感谢,

达米安

【问题讨论】:

    标签: entity-framework


    【解决方案1】:

    根据我的经验,您无法通过 Entityframework 迁移来实现这一点。 EF 迁移通常是极其简单的机制。它不对数据库结构执行任何检查。它对数据库结构的了解仅基于 __MigrationHistory 表,迁移只能作为一个整体应用或恢复,不能部分应用或恢复。如果迁移系统是唯一管理数据库结构的系统,则迁移系统表现良好,如果有其他一些东西(如用户)自行混合结构,则通常会导致需要手动解决的冲突。如果你想拥有智能迁移系统,恐怕你必须自己编写。客户的正确解决方案是撤销对与系统交互不谨慎的没有经验的用户的管理权限(我假设是这种情况)。如果他们拒绝这样做,而您因为他们的行为而不得不修复系统,那么这是向他们发送另一张维修发票的绝佳机会(这不是很漂亮吗?)。

    【讨论】:

    • 将近 1 年后我才意识到我从未回复过,感谢您的回复。最终这并不是什么大问题,我们的软件系统每天都会进行数据库备份,因此从其中一个进行恢复非常简单。我们最终决定不为维修开具发票:)。
    猜你喜欢
    • 1970-01-01
    • 2019-08-06
    • 2015-09-09
    • 2013-11-16
    • 1970-01-01
    • 2012-03-07
    • 1970-01-01
    • 2021-08-27
    • 2021-04-04
    相关资源
    最近更新 更多