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