EF Core从DateTime迁移到DateTimeOffset

时间:2019-12-20 10:21:07

标签: c# entity-framework .net-core entity-framework-core

我希望为当前使用DateTime属性的一系列对象创建迁移,并将其转换为DateTimeOffset属性。在本示例中,我将其中的大多数去除了,但是它们是相似的:

public partial class DatetimeOffset : Migration
{
    protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.AlterColumn<Message>(nameof(Message.SendingDate), nameof(Message), nameof(DateTimeOffset));
    }

    protected override void Down(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.AlterColumn<Message>(nameof(Message.SendingDate), nameof(Message), "datetime");
    }
}

出于这些目的,只需假设Message像这样:

public class Message {
    public DateTime SendingDate { get; set; }
}

我的升级工作正常,但是降级没有效果,因为它是DateTimeOffset和DateTime之间的有损转换。有什么方法可以投射这个?我不在乎精度损失。

我正在使用.NET Core 2.2和EF Core 2.2。

1 个答案:

答案 0 :(得分:0)

我最终使用的是datetime2列,该列的精度为7位数字,可以很好地进行转换:

public partial class DatetimeOffset : Migration
{
    protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.AlterColumn<Message>(nameof(Message.SendingDate), nameof(Message), nameof(DateTimeOffset));
    }

    protected override void Down(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.AlterColumn<Message>(nameof(Message.SendingDate), nameof(Message), "datetime2(7)");
    }
}