Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用dbml将数据库值映射到时间跨度_Sql Server_Linq_Linq To Sql_Timespan - Fatal编程技术网

Sql server 使用dbml将数据库值映射到时间跨度

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”失败。未明错误 为了解决这个问题,我将

我需要在数据库列中存储时间偏移量(例如,上午12:25,只有时间,没有日期)

我想使用VisualStudio2008中良好的数据可视化建模功能来生成dbml及其代码。数据库是SQLServer2005

由于TimeSpan本质上是一个包含刻度数的Int64(也称为long),因此我尝试将该长度存储在数据库中

但是,如果我指定列应映射到TimeSpan类型的属性,Visual Studio将报告:

警告:自定义工具“MSLinqToSQLGenerator”失败。未明错误

为了解决这个问题,我将数据库值映射到一个内部属性,并添加了一个分部类,该类实现了属性访问器,将整数值从数据库转换为TimeSpan并返回


是否有办法为该属性生成正确的代码?或者有没有更好的方法将时间跨度存储在SQLServer2005数据库中,以便使用dbml进行更轻松的访问?

我以前尝试过这样做,但都失败了。我发现,即使我没有在数据库中使用DateTime的日期部分,但通过将整个日期和时间提交到数据库,我可以在需要的时间内提供所有功能

您可以使用ToSortTimeString()仅显示应用程序中的时间。将完整日期与时间放在一起可以让您在需要时进行真实时间计算,例如确定开始时间和停止时间之间的时间跨度。因为与时间跨度相关的刻度包括日期,所以没有理由为了将时间存储在数据库中而花费额外的精力


我知道这并不是你真正希望的,但可能是满足你需求的最简单的解决方案,这来自于我在尝试做同样的事情时几个小时的脑力激荡。

我以前也尝试过这样做,但都失败了。我发现,即使我没有在数据库中使用DateTime的日期部分,但通过将整个日期和时间提交到数据库,我可以在需要的时间内提供所有功能

您可以使用ToSortTimeString()仅显示应用程序中的时间。将完整日期与时间放在一起可以让您在需要时进行真实时间计算,例如确定开始时间和停止时间之间的时间跨度。因为与时间跨度相关的刻度包括日期,所以没有理由为了将时间存储在数据库中而花费额外的精力


我知道这并不是您真正想要的,但可能是满足您需求的最简单的解决方案,这是我在尝试做同样的事情时数小时绞尽脑汁的经验得出的。

您可以将TimeSpan数据类型映射到Sql“Time”数据类型(从而避免任何令人讨厌的实现问题)。 但是,必须满足以下要求:

  • 您的代码库必须在上运行 .NET3.5SP1
  • Sql数据库必须 在Sql 2008上运行(时间 数据类型仅在2008年可用)
  • 澄清如下:

    您可以将TimeSpan数据类型映射到Sql“Time”数据类型(从而避免任何令人讨厌的实现问题)。 但是,必须满足以下要求:

  • 您的代码库必须在上运行 .NET3.5SP1
  • Sql数据库必须 在Sql 2008上运行(时间 数据类型仅在2008年可用)
  • 澄清如下:

    不久前也遇到了这个问题

    据我所知,SQL Server 2005没有直接的解决方案,因此我使用了一个技巧:

    在类型为
    BigInt NOT NULL
    的数据库中有
    Duration
    列(实际上应该存储.NET
    TimeStamp
    数据类型)。以下是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
    列(实际上应该存储.NET
    TimeStamp
    数据类型)。以下是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列上排序。作为一个