如何解决C#日期时间以微秒为单位插入SQL Server值
我正在将.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保留为空,并将其留给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(DateTime2(7)
)的SQL Server 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)")]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。