我正在尝试将 TimeSpan Code First 属性映射到 SQL Server。 Code First 似乎将其创建为 SQL 中的 Time(7) 。然而.Net 中的 TimeSpan 可以处理超过 24 小时的时间段,并且我需要存储超过 24 小时的事件长度。使用 Code First 处理此问题的最佳方法是什么。
最佳答案
根据我的 previous question关于如何在 SQL 中存储 TimeSpan,我被建议将其存储为秒或刻度等。最后我没有映射 TimeSpan 列,因为 SQL Server 中没有等效项。我只是创建了第二个字段,它将 TimeSpan 转换为刻度并将其存储在数据库中。然后我阻止存储 TimeSpan
public Int64 ValidityPeriodTicks { get; set; }
[NotMapped]
public TimeSpan ValidityPeriod
{
get { return TimeSpan.FromTicks(ValidityPeriodTicks); }
set { ValidityPeriodTicks = value.Ticks; }
}
如果您希望在 EF Core 中执行此操作,它会更干净,因为您可以使用 Value Conversions 。在 2.1 中,您可以使用值转换和 TimeSpanToTicksConverter 将时间跨度透明地映射到数据库中的刻度。因此,当然值得考虑 EF Core(假设其他功能满足需求) - 可以在 Framework 4.7 项目中使用它,因此不需要切换到 .Net Core。
关于sql-server - 如何将大于 24 小时的 TimeSpan 映射到 SQL Server Code First?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8503132/