首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将大于24小时的TimeSpan首先映射到SQL server代码?

如何将大于24小时的TimeSpan首先映射到SQL server代码?
EN

Stack Overflow用户
提问于 2011-12-14 18:43:44
回答 3查看 13.1K关注 0票数 41

我正在尝试将SQL属性映射到TimeSpan服务器。在SQL中,Code First似乎将其创建为时间(7)。然而,.Net中的TimeSpan可以处理比24小时更长的周期,我需要存储比24小时更长的事件长度。用Code First处理这个问题的最好方法是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-15 20:40:41

根据我关于如何在SQL中存储TimeSpan的previous question,我被建议将它存储为秒或刻度等。最后,我没有映射TimeSpan列,因为在SQL server中没有对应的列。我简单地创建了第二个字段,它将TimeSpan转换为ticks,并将其存储在DB中。然后,我阻止存储TimeSpan

代码语言:javascript
复制
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核心。

票数 35
EN

Stack Overflow用户

发布于 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。我假设由于没有列出解决方案,所以目前不可能。

票数 3
EN

Stack Overflow用户

发布于 2011-12-14 18:51:13

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

一种解决方案是在实体配置中提供自定义列类型,如下所示:

代码语言:javascript
复制
modelBuilder
.Entity<MyClass>()
.Property(c => c.MyTimeSpan)
.HasColumnType("whatever sql type you want to use");
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8503132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档