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

标签 c# sql-server entity-framework datetime

我正在使用 .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/

相关文章:

c# - 如何限制 PDB 文件中的 0xFEEFEE 行数

c# - 尝试编辑不存在的项目的最佳实践?

C# - 元组和字典和列表有什么区别

sql-server - 如何配置logstash以将数据从MS-SQL服务器传输到elasticsearch

c# - 将 Entity Framework 与两个单独的数据库(开发和生产)一起使用

c# - 在 Viewmodel 属性中防止 StackOverFlow 或递归

python - 使用 python pyodbc 和 pandas 数据框将数据从 SQL Server 导出到 Excel

sql-server - 从 MSSQL 中的表中获取数字范围

entity-framework - EntityFramework 不保存 null 和 false 值

c# - .OrderBy()/.OrderByDescending() 与 .FirstOrDefault()/.First()