我正在尝试将SQL属性映射到TimeSpan服务器。在SQL中,Code First似乎将其创建为时间(7)。然而,.Net中的TimeSpan可以处理比24小时更长的周期,我需要存储比24小时更长的事件长度。用Code First处理这个问题的最好方法是什么?
发布于 2011-12-15 20:40:41
根据我关于如何在SQL中存储TimeSpan的previous question,我被建议将它存储为秒或刻度等。最后,我没有映射TimeSpan列,因为在SQL server中没有对应的列。我简单地创建了第二个字段,它将TimeSpan转换为ticks,并将其存储在DB中。然后,我阻止存储TimeSpan
public Int64 ValidityPeriodTicks { get; set; }
[NotMapped]
public TimeSpan ValidityPeriod
{
get { return TimeSpan.FromTicks(ValidityPeriodTicks); }
set { ValidityPeriodTicks = value.Ticks; }
}如果你想在EF核心中做到这一点,它要干净得多,因为你可以使用Value Conversions。在2.1中,您可以使用值转换和TimeSpanToTicksConverter来透明地将时间跨度映射到数据库中的节拍。所以肯定值得考虑EF核心(假设其他功能满足需求)-可以在Framework4.7项目中使用它,所以不需要切换到.Net核心。
发布于 2013-02-01 06:14:35
据我所知,SQL Server中没有用于.NET的TimeSpan的对等数据类型。最接近的匹配项是时间,但正如您所指出的,它只支持最长24小时的值?http://msdn.microsoft.com/en-us/library/ms186724.aspx#DateandTimeDataTypes。
下面的MSDN文档描述了这个http://msdn.microsoft.com/en-us/library/bb386909.aspx。我假设由于没有列出解决方案,所以目前不可能。
发布于 2011-12-14 18:51:13
首先,MVC与这个问题无关。它完全与EF Code First和SQL Server相关,所以这是DAL的问题。
一种解决方案是在实体配置中提供自定义列类型,如下所示:
modelBuilder
.Entity<MyClass>()
.Property(c => c.MyTimeSpan)
.HasColumnType("whatever sql type you want to use");https://stackoverflow.com/questions/8503132
复制相似问题