2013-02-15 53 views
0

这似乎并没有工作:实体框架5列映射日期时间

this.Property(t => t.mydatetime) 
    .HasColumnType("datetime") 
    .HasColumnName("mydatetime"); 

看SQL事件探查器更新SQL字符串仍然使用DATETIME2(7),并使用额外的小数位。这个结果是datetime2和datetime之间的舍入差异。

我该如何强制实体框架使用datetime sql类型?

谢谢!

+0

无法重现这一点。 'HasColumnType(“datetime”)'创建'datatime'列(Sql Server 2008 r2,EF 5)。 – 2013-02-15 18:54:50

+0

我的分贝已经有一个日期时间列。我没有使用EF创建数据库。我也在使用sql 2008 r2 – dnndeveloper 2013-02-15 18:57:27

+0

嗯......更多相关信息? – 2013-02-15 19:26:10

回答

1

HasColumnType("datetime")指定列类型,而不是在SQL语句中使用的临时参数类型。你无法控制这些,这是没有必要的。如果您的应用程序中有一个.NET DateTime,并且某些小数位数已填满并且希望将其存储在SQL Server中的datetime类型中,则该值将(并且只能)以四舍五入值存储。在将SQL发送到数据库服务器之前,如果舍入发生在客户端,或者数据库服务器本身发生舍入,则无关紧要。结果将是相同的:舍入存储的值会导致精度损失。

+1

问题是我们有两个代码路径保存相同的日期时间.net对象。一个代码路径使用ef,另一个不使用。由于Ef发送7(日期时间2)小数位,另一个发送3(日期时间),它会导致保存到数据库时舍入问题。 EF4没有发生这种情况。 – dnndeveloper 2013-02-15 22:41:45