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 ?
非常感谢你的支持。
您可能需要强制 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)
| 归档时间: |
|
| 查看次数: |
743 次 |
| 最近记录: |