Sql server 使用dbml将数据库值映射到时间跨度
我需要在数据库列中存储时间偏移量(例如,上午12:25,只有时间,没有日期) 我想使用VisualStudio2008中良好的数据可视化建模功能来生成dbml及其代码。数据库是SQLServer2005 由于TimeSpan本质上是一个包含刻度数的Int64(也称为long),因此我尝试将该长度存储在数据库中 但是,如果我指定列应映射到TimeSpan类型的属性,Visual Studio将报告: 警告:自定义工具“MSLinqToSQLGenerator”失败。未明错误 为了解决这个问题,我将数据库值映射到一个内部属性,并添加了一个分部类,该类实现了属性访问器,将整数值从数据库转换为TimeSpan并返回Sql server 使用dbml将数据库值映射到时间跨度,sql-server,linq,linq-to-sql,timespan,Sql Server,Linq,Linq To Sql,Timespan,我需要在数据库列中存储时间偏移量(例如,上午12:25,只有时间,没有日期) 我想使用VisualStudio2008中良好的数据可视化建模功能来生成dbml及其代码。数据库是SQLServer2005 由于TimeSpan本质上是一个包含刻度数的Int64(也称为long),因此我尝试将该长度存储在数据库中 但是,如果我指定列应映射到TimeSpan类型的属性,Visual Studio将报告: 警告:自定义工具“MSLinqToSQLGenerator”失败。未明错误 为了解决这个问题,我将
是否有办法为该属性生成正确的代码?或者有没有更好的方法将时间跨度存储在SQLServer2005数据库中,以便使用dbml进行更轻松的访问?我以前尝试过这样做,但都失败了。我发现,即使我没有在数据库中使用DateTime的日期部分,但通过将整个日期和时间提交到数据库,我可以在需要的时间内提供所有功能 您可以使用ToSortTimeString()仅显示应用程序中的时间。将完整日期与时间放在一起可以让您在需要时进行真实时间计算,例如确定开始时间和停止时间之间的时间跨度。因为与时间跨度相关的刻度包括日期,所以没有理由为了将时间存储在数据库中而花费额外的精力
我知道这并不是你真正希望的,但可能是满足你需求的最简单的解决方案,这来自于我在尝试做同样的事情时几个小时的脑力激荡。我以前也尝试过这样做,但都失败了。我发现,即使我没有在数据库中使用DateTime的日期部分,但通过将整个日期和时间提交到数据库,我可以在需要的时间内提供所有功能 您可以使用ToSortTimeString()仅显示应用程序中的时间。将完整日期与时间放在一起可以让您在需要时进行真实时间计算,例如确定开始时间和停止时间之间的时间跨度。因为与时间跨度相关的刻度包括日期,所以没有理由为了将时间存储在数据库中而花费额外的精力
我知道这并不是您真正想要的,但可能是满足您需求的最简单的解决方案,这是我在尝试做同样的事情时数小时绞尽脑汁的经验得出的。您可以将TimeSpan数据类型映射到Sql“Time”数据类型(从而避免任何令人讨厌的实现问题)。 但是,必须满足以下要求:
您可以将TimeSpan数据类型映射到Sql“Time”数据类型(从而避免任何令人讨厌的实现问题)。 但是,必须满足以下要求:
不久前也遇到了这个问题 据我所知,SQL Server 2005没有直接的解决方案,因此我使用了一个技巧: 在类型为
BigInt NOT NULL
的数据库中有Duration
列(实际上应该存储.NETTimeStamp
数据类型)。以下是dbml定义:
<Column Name="Duration"
Member="DurationInternal"
AccessModifier="Protected"
Type="System.Int64"
DbType="BigInt NOT NULL"
CanBeNull="false" />
因此,我的类的用户有一个易于使用的属性,而不是大量的long
到TimeSpan
转换
希望,这会有所帮助。不久前也遇到了这个问题 据我所知,SQL Server 2005没有直接的解决方案,因此我使用了一个技巧: 在类型为
BigInt NOT NULL
的数据库中有Duration
列(实际上应该存储.NETTimeStamp
数据类型)。以下是dbml定义:
<Column Name="Duration"
Member="DurationInternal"
AccessModifier="Protected"
Type="System.Int64"
DbType="BigInt NOT NULL"
CanBeNull="false" />
因此,我的类的用户有一个易于使用的属性,而不是大量的long
到TimeSpan
转换
希望,这会有所帮助。只是好奇,为什么只在数据库中存储时间而不存储日期?SQL 2005不支持仅存储时间。我的应用程序包含每天在特定时间发生的活动的日程安排。所以日期与时间无关。只是好奇,为什么你只在数据库中存储时间而不存储日期?SQL 2005不支持仅存储时间。我的应用程序包含每天在特定时间发生的活动的日程安排。所以约会没有关联,只是时间。我看到了第一个麻烦的迹象;只是尝试设置时间跨度的格式。那已经很痛苦了。。。我看到了麻烦的最初迹象;只是尝试设置时间跨度的格式。那已经很痛苦了。。。实际上,我所做的是将TimeSpan值存储为整数值。NET使用Int64值(Ticks)存储TimeSpan和DateTime值。虽然这意味着我不能在SQL中使用日期和时间函数,但它确实允许我在TimeSpan列上排序。作为额外的好处,它处理了.NET DateTime/TimeSpan和SQLServer DateTime之间的分辨率差异。NET使用Int64值(Ticks)存储TimeSpan和DateTime值。虽然这意味着我不能在SQL中使用日期和时间函数,但它确实允许我在TimeSpan列上排序。作为一个