【问题标题】:EF Core + npgsql DateTime uses windows 10 localization for formattingEF Core + npgsql DateTime 使用 windows 10 本地化进行格式化
【发布时间】:2018-06-29 05:43:00
【问题描述】:

我将我的开发机器更新到 Windows 10 并尝试将新的 Required DateTime 属性添加到类中。我使用 Add-Migration 创建了迁移,并生成了合理的迁移:

    {
        migrationBuilder.AddColumn<DateTime>(
            name: "AskingTime",
            table: "Questions",
            nullable: false,
            defaultValue: new DateTime(2000, 1, 1, 15, 0, 0, 0, DateTimeKind.Unspecified));
    }

我尝试通过 Script-Migration 应用它,但失败并出现以下错误:

ALTER TABLE "Questions" ADD "AskingTime" timestamp without time zone NOT NULL DEFAULT TIMESTAMP '2000-01-01 15.00.00';

Npgsql.PostgresException (0x80004005): 22007: invalid input syntax for type timestamp: "2000-01-01 15.00.00"

我们在我的同事机器上进行了尝试,该机器仍然装有 Windows 7,它按预期工作,没有错误。问题是 Windows 10 中的芬兰本地化在时间字段中指定一个点作为分隔符。我通过更改为使用冒号的英语(瑞典)时间本地化来让它在我的机器上工作。

所以我的最后一个问题是,是否可以强制 npgsql 或 EF Core 正确解析以点作为时间分隔符的日期时间对象?

【问题讨论】:

  • 问题仅与迁移有关吗?常规查询呢?
  • @Albert 我实际上意识到我有一个名为“PublishDate”的 DateTime 字段,它没有“Required”属性。即使使用芬兰本地化设置,该字段也可以正常工作。我可以使用 DateTime 字段创建和查询对象。

标签: .net asp.net-core entity-framework-core


【解决方案1】:

如果问题只发生在迁移中,那么你可以用HasDefaultValueSql而不是HasDefaultValue指定默认值:

builder.Entity<Question>()
    .Property(b => b.AskingTime)
    .HasDefaultValueSql("'2000-01-01 15:00:00'");

注意:我不确定我是否以正确的字符串格式指定了日期,但你明白了。

【讨论】:

    猜你喜欢
    • 2021-08-26
    • 1970-01-01
    • 2020-01-25
    • 1970-01-01
    • 1970-01-01
    • 2014-11-30
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多