这是一个很长的问题,但如果我能就此得到一些好的建议,我将非常感激。简而言之,我正在寻找一种用于MS SQL数据库模式版本升级的好方法,该方法还要求将数据从已删除的表移动到新表中。
我认为Stack Overflow是这个问题最合适的地方(不是dba.stackexchange.com),因为在它的核心,对于使用Entity Framework的.NET开发人员来说这是一个问题,而这个数据库部分主要由auto组成。生成的sql脚本。
.NET应用程序和SQL数据库在Azure中运行(工作者角色中的应用程序和Azure SQL中的数据库)。到目前为止,版本升级工作正常,因为所有数据库架构更改都很简单(如添加新列)。但是,从现在开始,我还需要处理在升级期间将数据从一个表移动到另一个表。 (我能够通过创建一个新数据库来临时修复此问题,使用旧数据库中的数据生成脚本并手动编辑脚本以使其适合新模式,但我希望有更好的方法)。
我使用Entity Framework并使用Model First。实体和关联在Visual Studio数据模型设计器中定义,这种方法非常适合我的应用程序。
我使用dacpac来升级Azure SQL数据库,这种方法一直运行到现在(但现在我将丢失数据,所以现在我必须找到一种方法将数据移动到新表)。
我希望我可以继续使用实体框架并在设计器中定义实体/关联,但如果需要,可以从dacpac升级转换为另一种技术。
这是一个简单的例子来说明这个问题,但是从现在开始我似乎经常会遇到几乎相同的情况。查看下图中的旧版和新版架构。假设数据库中已有数据。我需要ImageFile中的数据最终在ImageFileOriginal或ImageFileProcessed中,具体取决于IsOriginal布尔/位值。使用“升级数据层应用程序”我将收到有关数据丢失的警报。你会建议采用什么方法来解决这个问题?正如我之前所说,如果需要,可以将dacpac升级转换为另一种技术。
我已经阅读过Visual Studio数据库项目,Fluent Migrator,Red Gate和Entity Designer数据库生成Power Pack(它不支持Visual Studio 2012),但我没有找到一个好方法。我承认我没有花一整天时间深入研究每种技术,但我当然花了一些时间尝试找到一种好的方法。
答案 0 :(得分:1)
迁移数据库模式(创建/删除表/列)以及数据的最佳方法是使用SSDT - Sql Server数据工具,可用于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
答案 1 :(得分:0)
在Configuration
类中设置构造函数如下:
public Configuration()
{
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = false;
}
将AutomaticMigrationEnabled
属性设置为true
表示我们使用自动代码首次迁移,另一个属性AutomaticMigrationDataLossAllowed
设置为false
,这意味着在迁移过程中,数据库表的迁移不会丢失现有数据。
整个Configuration
课程如下。