sql-server - 如何将大于 24 小时的 TimeSpan 映射到 SQL Server Code First?

标签 sql-server entity-framework ef-code-first code-first

我正在尝试将 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/

相关文章:

mysql - 将查询 1 的值传递给查询 2

sql - 将临时表传递给另一个存储过程

sql-server - 存储过程没有返回值

c# - 如何使用 GraphDiff 更新相关实体?

asp.net-mvc-3 - MVC3 模型 View 问题与具有 2 个外键到同一个表的模型

sql - 如何在 SQL 连接中使用 lat/lng 半径进行选择

c# - 强制 EF ApplicationUser 加载导航属性

entity-framework - 为什么在 Entity Framework 6中仍未实现ON DELETE SET NULL?有障碍吗?

asp.net - 无法加载文件或程序集“MySql.Data,版本=6.3.6.0”

c# - includes() 函数不起作用