2012-09-19 57 views
0

我正在支持需要迁移代码的第一个生成的数据库的应用程序。更改是将三个属性(全部在同一个表/实体上)从一个字符串修改为一个可为空的小数。EF代码迁移 - 将字符串迁移到十进制字段(v。4.3.1.0)

这样做的部分要求是我需要将更改输出到SQL文件,因为我们将补丁部署到我们的客户端,他们也在生产中托管产品。

我被告知这是可能的,但我不确定如何去做。

问题:如何使用EF代码首先将数据库表迁移为具有可为空的小数而不是字符串,并将更改输出到SQL文件。我假定列中当前的所有值都可以转换为小数,但是如果不是这会改变复杂度?

+0

你期望在SQL文件中有什么?迁移脚本为SQL? – trailmax

+0

那么如果它正在生成一个迁移脚本,我会这么认为。即列类型改变和一些脚本来保存数据。 – contactmatt

回答

0

如果我在要求正确的,那么你就需要创建一个迁移,然后运行

Update-Database -Script 

这将创建一个对数据库运行,以更新结构的SQL脚本。

另外Update-Database -Verbose会更新数据库结构,并输出SQL运行。

如果您需要保存的数据,你也可以在你的迁移脚本运行SQL直接:

public partial class RenameColumn : DbMigration 
{ 
    public override void Up() 
    { 
     Sql("update blah..."); 
    } 

    public override void Down() 
    { 
     Sql("drop table bobby"); 
    } 

还有你可以做任何你需要做的保留数据:新增临时科拉姆/表,在那里复制原始数据,更改列类型,将数据转换为所需的格式并将其复制到新列,清理。

如果您在迁移过程中使用了Sql命令,那么当您运行Update-Database -Script时,它将为您提供组合的脚本脚手架迁移脚本和手动编写的脚本。

+0

我在哪里输入该命令? – contactmatt

+0

在程序包管理器控制器中。您运行'Add-Migration GiveMigratioAName' - 包管理器控制台的窗口。在VS中进入菜单查看 - >其他窗口 - >程序包管理器控制台 – trailmax

+0

查看数据保存的更新答案。 – trailmax