实体框架代码在数据库迁移后首先回滚

Posted

技术标签:

【中文标题】实体框架代码在数据库迁移后首先回滚【英文标题】:Entity framework code first rolling back after database migration 【发布时间】:2014-02-11 15:11:18 【问题描述】:

我有一个在任何地方都找不到答案的特定场景。

我想使用首先由 VistaDB 支持的实体框架代码。

存储的数据是用户特定的设置等,因此会有许多数据库副本,但它们永远不会在用户之间共享。但它们存储在本地存储中,与应用程序版本无关。

我可以很好地设置初始模型,并且前向迁移也很好(尽管我还不完全了解如何在运行时在每个用户桌面上执行此操作)。

我们通常会将应用程序发布给少数用户,但如果出现问题,则会回滚到以前的版本。

如果用户使用更新的模型运行 2.0 版应用程序,并且他们自动迁移他们的设置数据库,那么到目前为止一切顺利。

但现在我们将它们回滚到 1.0 版。我的理解是随着模型的前滚,1.0 代码不能再访问数据库。那么解决办法是什么?

我可以在每次更新模型时创建一个新的设置数据库,但是数据如何从旧的迁移过来呢?这也意味着在回滚时会丢失在新版本中所做的设置更改,反之亦然。

我真正想要的是让以前的版本(假设架构兼容)忽略模型更改,就像在 XML 中一样。即,如果您添加新列(或 XML 元素),旧代码会忽略它,因为它看不到它。但它仍然有效。对于这个用例,也许我只需要原始数据库访问而不是 EF?

【问题讨论】:

【参考方案1】:

我不确定这对于 VistaDB 是否同样适用,但使用 EF 对数据库进行角色化 看到这个堆栈溢出问题EF Migrations: Rollback last applied migration?

或者如果链接断开 Update-Database -TargetMigration:"您要回滚到的迁移的名称"

【讨论】:

以上是关于实体框架代码在数据库迁移后首先回滚的主要内容,如果未能解决你的问题,请参考以下文章

实体框架 - 重新开始 - 撤消/回滚所有迁移

实体框架代码首先迁移两个不同的数据库

如何使用实体框架回滚迁移的正确方法

实体框架6代码首先用oracle更新实体

调试代码优先的实体框架迁移代码

独立于模式的实体框架代码优先迁移