我正在尝试将一个TimeSpan Code First属性映射到SQL Server上。Code First似乎将其创建为SQL中的Time(7)类型。但是.Net中的TimeSpan可以处理超过24小时的时间段,我需要存储超过24小时的事件长度。使用Code First,最好的处理方法是什么?
我正在尝试将一个TimeSpan Code First属性映射到SQL Server上。Code First似乎将其创建为SQL中的Time(7)类型。但是.Net中的TimeSpan可以处理超过24小时的时间段,我需要存储超过24小时的事件长度。使用Code First,最好的处理方法是什么?
根据我的先前的问题,关于如何在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中执行此操作,那么使用值转换会更清晰一些。在2.1版本中,您可以使用值转换和TimeSpanToTicksConverter将TimeSpan映射到数据库中的ticks上,这样做非常值得考虑(假设其他功能符合需求)-可以在Framework 4.7项目中使用它,因此不需要切换到.Net Core。modelBuilder
.Entity<MyClass>()
.Property(c => c.MyTimeSpan)
.HasColumnType("whatever sql type you want to use");