如何将TimeSpan超过24小时映射到SQL Server Code First?

我正在尝试将TimeSpan Code First属性映射到SQL Server。 Code First似乎将其创build为SQL中的Time(7)。 但.Net中的TimeSpan可以处理比24小时更长的时间段,而且我需要存储超过24小时的事件长度。 Code First处理这个问题的最好方法是什么?

根据我以前关于如何在SQL中存储TimeSpan的问题 ,我build议将它存储为秒或门票等。最后,我没有映射TimeSpan列,因为在SQL服务器中没有等价物。 我只是创build了第二个字段,将TimeSpan转换为刻度并将其存储在数据库中。 然后我阻止存储TimeSpan

public Int64 ValidityPeriodTicks { get; set; } [NotMapped] public TimeSpan ValidityPeriod { get { return TimeSpan.FromTicks(ValidityPeriodTicks); } set { ValidityPeriodTicks = value.Ticks; } } 

据我所知,在SQL Server for .NET的TimeSpan中没有等效的数据types。 最接近的匹配是时间,但是,正如您所指出的,它只支持长达24小时的值? http://msdn.microsoft.com/en-us/library/ms186724.aspx#DateandTimeDataTypes

以下MSDN文档描述了这个http://msdn.microsoft.com/en-us/library/bb386909.aspx 。 我假设,因为没有解决scheme在那里列出,目前是不可能的。

首先,MVC与这个问题无关。 它与EF Code First和SQL Server完全相关,所以这是DAL的问题。

一种解决scheme可能是在您的实体configuration中提供自定义列types,如下所示:

 modelBuilder .Entity<MyClass>() .Property(c => c.MyTimeSpan) .HasColumnType("whatever sql type you want to use");