gpt4 book ai didi

C# Datetime 插入 SQL Server 值,精确到微秒

转载 作者:行者123 更新时间:2023-12-02 19:17:50 25 4
gpt4 key购买 nike

我正在使用 .Net Core 2.2 和 Entity Framework。我需要将一些数据插入 SQL Server。

在 C# 中,我使用 DateTime 数据类型,在 SQL Server 中,我使用 datetime2(6) - 默认值为:(sysdatetime()).

例如我的对象看起来像:

public partial class Contact
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime CreatedTime { get; set; }
}

如果我在创建对象时将 CreatedTime 保留为 null 并将其留给 SQL Server 使用默认值 (sysdatetime()),我将得到如下内容:2020-05-19 09:31:12.383593 在数据库中。

据我所知,DateTime 数据类型本身已经具有精确的微秒,但是,如果我为该 CreatedTime 属性设置一个值,例如:

obj.CreatedTime = DateTime.Now.AddTicks(123);
Console.WriteLine(obj.CreatedTime.ToString("yyyy-MM-dd HH:mm:ss.ffffff"));

我可以在控制台中看到该值,它将是 2020-08-18 07:42:52.131102 。但是,当通过 EntityFramwork 插入该 obj 时,数据库中的值将以毫秒为单位: 2020-08-18 07:42:52.131000 。看起来 EntityFramework 以某种方式只以毫秒为单位传递 DateTime?

非常感谢您的支持。

最佳答案

您可能需要强制 EF 使用精度为 100ns 的 SQL Server DateTime2(7) 最大/默认数据类型 (YYYY-MM-DD hh:mm:ss.0000000),你可以通过多种方式做到这一点

全局

modelBuilder
.Properties<DateTime>()
.Configure(c => c.HasColumnType("datetime2"));

明确地

modelBuilder
.Entity<SomeEntiity>()
.Property(f => f.SomeDate)
.HasColumnType("datetime2");

或通过属性

[Column(TypeName = "DateTime2(7)")]

关于C# Datetime 插入 SQL Server 值,精确到微秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63464235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com