C# 日期时间插入 SQL Server 值,精确到微秒

Lib*_*rty 2 c# sql-server datetime entity-framework

我将 .Net Core 2.2 与实体框架一起使用。我需要将一些数据插入 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; } 
}
Run Code Online (Sandbox Code Playgroud)

如果我在创建对象时将 CreatedTime 保留为空,并让 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"));
Run Code Online (Sandbox Code Playgroud)

我可以在控制台中看到该值,它将是2020-08-18 07:42:52.131102。但是,当通过 EntityFramwork 插入该 obj 时,数据库中的值将仅为毫秒:2020-08-18 07:42:52.131000。看起来 EntityFramework 不知何故只以毫秒精确度传递 DateTime ?

非常感谢你的支持。

AAA*_*ddd 6

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

全球范围

modelBuilder
  .Properties<DateTime>()
  .Configure(c => c.HasColumnType("datetime2"));
Run Code Online (Sandbox Code Playgroud)

明确地

modelBuilder
  .Entity<SomeEntiity>()
  .Property(f => f.SomeDate)
  .HasColumnType("datetime2"); 
Run Code Online (Sandbox Code Playgroud)

或者通过属性

[Column(TypeName = "DateTime2(7)")]
Run Code Online (Sandbox Code Playgroud)