加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

entity-framework – 如何使用EF Model First数据库模式升级来避

发布时间:2020-12-12 06:36:10 所属栏目:MsSql教程 来源:网络整理
导读:这是一个很长的问题,但如果我能就此得到一些好的建议,我将非常感激.简而言之,我正在寻找一种用于MS SQL数据库模式的版本升级的好方法,该方法还要求将数据从已删除的表移动到新表中. 我认为Stack Overflow是这个问题最合适的地方(不是dba.stackexchange.com),
这是一个很长的问题,但如果我能就此得到一些好的建议,我将非常感激.简而言之,我正在寻找一种用于MS SQL数据库模式的版本升级的好方法,该方法还要求将数据从已删除的表移动到新表中.

我认为Stack Overflow是这个问题最合适的地方(不是dba.stackexchange.com),因为在它的核心,对于使用Entity Framework的.NET开发人员来说这是一个问题,而这个数据库部分主要由自动生成的sql组成.脚本.

背景

.NET应用程序和SQL数据库在Azure中运行(工作者角色中的应用程序和Azure SQL中的数据库).到目前为止,版本升级工作正常,因为所有数据库架构更改都很简单(如添加新列).但是,从现在开始,我还需要处理在升级期间将数据从一个表移动到另一个表. (我可以通过创建一个新数据库来临时修复此问题,使用旧数据库中的数据生成脚本并手动编辑脚本以使其适合新模式,但我希望有更好的方法).

我使用Entity Framework,我使用Model First.实体和关联在Visual Studio数据模型设计器中定义,这种方法非常适合我的应用程序.

我使用dacpac来升级Azure SQL数据库,这种方法一直运行到现在(但现在我将丢失数据,所以现在我必须找到一种方法将数据移动到新表).

我希望我可以继续使用实体框架并在设计器中定义实体/关联,但如果需要,可以从dacpac升级转换到另一种技术.

升级方法直到现在

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

现在的情况

这是一个简化的例子来说明这个问题,但是从现在开始我似乎经常会遇到几乎相同的情况.查看下图中的旧版和新版架构.假设数据库中已有数据.我需要ImageFile中的数据最终在ImageFileOriginal或ImageFileProcessed中,具体取决于IsOriginal布尔/位值.使用“升级数据层应用程序”我将收到有关数据丢失的警报.你会建议采用什么方法来解决这个问题?正如我之前所说,如果需要,可以从dacpac升级到另一种技术.

我已经阅读过Visual Studio数据库项目,Fluent Migrator,Red Gate和Entity Designer数据库生成Power Pack(它不支持Visual Studio 2012),但我没有找到一个好办法.我承认我没有花一整天时间深入研究每种技术,但我当然花了一些时间尝试找到一种好的方法.

解决方法

迁移数据库模式(创建/删除表/列)以及数据的最佳方法是使用可用于Visual Studio 2010和Visual Studio 2012的SSDT – Sql Server数据工具.

以下是一些非常有用的链接:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读