gpt4 book ai didi

entity-framework - 如何通过 EF Model First 数据库架构升级避免数据丢失?

转载 作者:行者123 更新时间:2023-12-04 08:52:37 26 4
gpt4 key购买 nike

这是一个很长的问题,但如果我能得到一些好的建议,我将非常感激。简而言之,我正在寻找一种对 MS SQL 数据库架构进行版本升级的好方法,该方法还要求将数据从已删除的表移动到新表中。
我认为 Stack Overflow 是这个问题最合适的地方(不是 dba.stackexchange.com),因为从本质上讲,这是使用 Entity Framework 的 .NET 开发人员的问题,其中的数据库部分主要由自动生成的 sql 组成脚本。

背景
.NET 应用程序和 SQL 数据库正在 Azure 中运行(辅助角色中的应用程序和 Azure SQL 中的数据库)。直到现在,版本升级都运行良好,因为所有数据库架构更改都很简单(例如添加新列)。但是,从现在开始,我还需要处理升级过程中将数据从一张表移动到另一张表的问题。 (我可以通过创建一个新数据库来临时解决这个问题,使用旧数据库中的数据生成一个脚本并手动编辑该脚本以使其适合新模式,但我希望有更好的方法)。
我使用 Entity Framework ,我使用模型优先。实体和关联是在 Visual Studio 数据模型设计器中定义的,这种方法非常适合我的应用程序。
我使用 dacpac 升级 Azure SQL 数据库,这种方法直到现在都很有效(但现在我会丢失数据,所以现在我必须找到一种方法将数据移动到新表)。
我希望我可以继续使用 Entity Framework 并在设计器中定义实体/关联,但如果需要,可以从 dacpac 升级切换到另一种技术。
到现在为止的升级方法

  • 我在设计器中添加了新实体(表)、关联(关系)和属性(列)。
  • 我右键单击,选择“从模型生成数据库...”,这将生成一个 .sql 脚本,该脚本删除旧的数据库对象并创建新的数据库对象。
  • 我创建了一个空数据库并运行脚本来创建表/键等。
  • 在 SQL Server Management Studio 中,我右键单击数据库并选择“任务 -> 提取数据层应用程序...”。向导完成后,我得到了我需要的 dacpac(实际上我现在可以删除数据库,因为我创建它只是为了能够获取 dacpac 文件,因为我认为我无法在 Visual Studio 数据模型设计器中生成它) .
  • 我右键单击 Azure SQL 数据库并选择“任务 -> 升级数据层应用程序...”并按照向导操作。
    到现在为止我从来没有丢失过数据,所以这很好用!

  • 现在的情况
    这是一个简单的例子来说明这个问题,但从现在开始我会经常遇到几乎相同的情况。在下图中查看架构的旧版本和新版本。假设数据库中已经有数据。我需要根据 IsOriginal bool 值/位值将 ImageFile 中的数据以 ImageFileOriginal 或 ImageFileProcessed 结束。使用“升级数据层应用程序”我会收到数据丢失的警报。你会推荐什么方法来处理这个问题?正如我之前所说,如果需要,可以从 dacpac 升级切换到另一种技术。
    Old schema
    New schema
    我已经阅读了 Visual Studio Database Projects、Fluent Migrator、Red Gate 和 Entity Designer Database Generation Power Pack(它不支持 Visual Studio 2012),但我没有找到一个好的方法。我承认我没有花一整天时间深入研究每种技术,但我确实花了一些时间来尝试找到一种好的方法。

    最佳答案

    迁移数据库架构(创建/删除表/列)和数据的最佳方法是使用 SSDT - Sql Server Data Tools,可用于 Visual Studio 2010 和 Visual Studio 2012。

    这里有一些非常有用的链接:

    http://msdn.microsoft.com/data/tools
    http://blogs.msdn.com/b/ssdt
    http://msdn.microsoft.com/en-us/data/hh297027

    关于entity-framework - 如何通过 EF Model First 数据库架构升级避免数据丢失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16804510/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com