使用实体框架将列从文本更改为整数



我的表有一个文本列,我想更改为整数。现有的文本列包含可以转换为整数的值。我不想更改列名。

如何在不丢失数据的情况下,先使用代码安全地完成此操作?

一种选择是创建一个新的临时列。复制值。然后删除旧列并重命名新列。但我只是不太确定实体框架将如何处理这些变化。

因此,我只是将列定义从:更改为

[Display(Name = "Bill of Lading")]
[Required]
[StringLength(80)]
public string BillOfLading { get; set; }

收件人:

[Display(Name = "Bill of Lading")]
public int BillOfLading { get; set; }

我修补了我的代码,使其能够使用新类型进行编译,并添加了一个迁移,看起来像这样:

public partial class TransloadingDetailBillOfLadingToInt : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterColumn<int>(
name: "BillOfLading",
table: "TransloadingDetails",
type: "int",
nullable: false,
oldClrType: typeof(string),
oldType: "nvarchar(80)",
oldMaxLength: 80);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterColumn<string>(
name: "BillOfLading",
table: "TransloadingDetails",
type: "nvarchar(80)",
maxLength: 80,
nullable: false,
oldClrType: typeof(int),
oldType: "int");
}
}

我能够在我们现有的一个较小的演示数据库上运行update-database。在第一次尝试时,我有一个无法转换的列值。在那个例子中,我出现了一个错误,没有丢失任何数据。一个好兆头!

更正数据后,我再次运行它,文本列被转换为整数。所有现有数据都已正确转换。然后在我的主数据库上也发生了同样的事情。

因此,至少在将文本列转换为整数列的情况下,可以转换数据,这与您希望的一样有效。

最新更新