我正在支持一个应用程序,我们需要在其中迁移代码首先生成的数据库。更改是将三个属性(都在同一个表/实体上)从字符串修改为可以为空的小数。
这样做的部分要求是我需要将更改输出到 SQL 文件,因为我们将补丁部署到我们的客户端,该客户端也在生产中托管产品。
有人告诉我这是可能的,但我不确定该怎么做。
问题:我如何首先使用 EF 代码将数据库表迁移为具有可为空的小数而不是字符串,并将更改输出到 SQL 文件。我假设当前列中的所有值都可以转换为小数,但如果不是,那将如何改变复杂性?
我正在支持一个应用程序,我们需要在其中迁移代码首先生成的数据库。更改是将三个属性(都在同一个表/实体上)从字符串修改为可以为空的小数。
这样做的部分要求是我需要将更改输出到 SQL 文件,因为我们将补丁部署到我们的客户端,该客户端也在生产中托管产品。
有人告诉我这是可能的,但我不确定该怎么做。
问题:我如何首先使用 EF 代码将数据库表迁移为具有可为空的小数而不是字符串,并将更改输出到 SQL 文件。我假设当前列中的所有值都可以转换为小数,但如果不是,那将如何改变复杂性?
如果我的要求是正确的,那么您需要创建一个迁移,然后运行
Update-Database -Script
这将创建一个 sql 脚本,该脚本将针对数据库运行以更新结构。
还将更新 DB 结构,并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
,它将为您提供组合脚本 - 脚手架迁移脚本和您手动编写的脚本。