如何在 EF Core 6.0 中表示日期时间 - 没有时区的时间戳

han*_*shi 17 c# postgresql entity-framework-core asp.net-core asp.net-core-6.0

我将 ASP.NET Core 项目从 3.1 迁移到 6.0。

我已复制旧迁移并将其粘贴到我们的新版本中

EF Core 3.1(旧)上的迁移

migrationBuilder.AddColumn<DateTime>(
                name: "CalendarStartDate",
                table: "DealOverview",
                nullable: false,
                defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified));
Run Code Online (Sandbox Code Playgroud)

EF Core 6.0 中的迁移(新)

migrationBuilder.AlterColumn<DateTime>(
                name: "StartDate",
                table: "DealOverview",
                type: "timestamp without time zone",
                nullable: false,
                oldClrType: typeof(DateTime),
                oldType: "timestamp with time zone");
Run Code Online (Sandbox Code Playgroud)

迁移失败,因为这一行

public DateTime StartDate { get; set; }
Run Code Online (Sandbox Code Playgroud)

已经改变。

我从这个包中走了出来:

<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="3.1.4" />
Run Code Online (Sandbox Code Playgroud)

到这个包:

<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="6.0.1" /> 
Run Code Online (Sandbox Code Playgroud)

Gur*_*ron 29

EF Core 6 Npgsql对时间戳处理逻辑引入了一些重大更改。您可以尝试通过将下一行添加到StartupProgram文件来“恢复”回旧行为:

AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true);
Run Code Online (Sandbox Code Playgroud)

但总的来说,建议迁移到新的行为。