【问题标题】:How to seed utcnow() for EF Core and Postgres如何为 EF Core 和 Postgres 播种 utcnow()
【发布时间】:2022-08-23 00:22:14
【问题描述】:

我正在尝试为 EF Core 中的 DateTime 属性播种一些值。目前,它正在使用以下代码播种DateTime.Now

modelBuilder.Entity<AnalysisFile>()
                .Property(analysisFile => analysisFile.TimeCreated)
                .HasDefaultValueSql(\"now()\");

所以now() 基本上是一个本地 Postgres 方法,它在这里发挥了魔力。我在网上搜索并查看了 Postgres 文档,看看是否有一个函数可以给我类似utcnow() 的信息。

https://www.postgresql.org/docs/current/functions-datetime.html

我找不到类似的东西。也许 Postgres 中不存在该功能。然后我开始想知道是否有任何方法可以将时区与`HasDefaultValueSql.我在那里也没有找到太多帮助。

我在这里错过了什么吗?我认为这很简单,但我无法在 EF Core 或 Postgres 中找到本机执行的任何功能。有什么建议么?

  • timezone(\'UTC\', now()) 怎么样?

标签: postgresql datetime entity-framework-core


【解决方案1】:

我创建了一个常量文件。

public static class SqlKeyWords
{
    public const string CurrentUserDefault = "CURRENT_USER"; /* SqlServer, PostGres */

    //public const string CurrentTimeStamp = "GETUTCDATE()"; /* SqlServer */

    public const string CurrentTimeStamp = "timezone('utc', now())"; /* PostGres */ 
}

然后我在我的“地图”中提到了single source of truth

using System.Diagnostics.CodeAnalysis;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;

namespace MyCompany.MyEfLayer.OrmMaps
{
    [ExcludeFromCodeCoverage]
    public class MyThingMap : IEntityTypeConfiguration<MyThingEntity>
    {
        public void Configure(EntityTypeBuilder<MyThingEntity> builder)
        {


            builder.Property(cn => cn.LastUpdated).HasColumnName("LastUpdatedColumn");
            builder.Property(dvsql => dvsql.LastUpdated).HasDefaultValueSql(SqlKeyWords.CurrentTimeStamp);
            builder.Property(req => req.LastUpdated).IsRequired();

        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    • 2020-10-20
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多