gpt4 book ai didi

c# - MS SQL如何记录负时间

转载 作者:太空狗 更新时间:2023-10-29 21:08:27 28 4
gpt4 key购买 nike

我在 MS SQL 数据库中有一个类型为“TIME”的列。我需要在其中记录一个负值。它不是两个特定时间或日期之间的范围。它是用于计算的抽象时间值。在 Entity Framework 中,它被视为 TimeSpan,MetaData.tt 会自动处理数据库中所有 TIME 定义的列。

例如,我可能有一个任意日历,其中有周一早上 5 点和晚上 8 点的事件,周二下午 4 点的事件,以及之后周日凌晨 3 点的事件。我可以将值添加到这些时间,并在事件开始之前(如果是负时间)或之后(如果是正时间)获得一个时间。

当我尝试写下一个负值时,数据库拒绝了。

entity到数据库的记录是通过controller中的post属性直接bind的,所以如果需要翻译成ticks,用Javascript做靠谱吗?我将如何处理它的输入文本框?看起来我无法将值与文本框中的内容分开。如果我必须将它变成一个 INT,我就不能再对它使用 @EditorFor,这会造成另一个错误点,代码变得不那么灵活。

感觉我应该创建新列来表示这些值的负值,并使用带有隐藏输入的下拉列表而不是文本框。

编辑:为什么要避免非时间类型:

考虑这段代码:

var typeName = _code.Escape(edmType.MetadataProperties.Where(…).FirstOrDefault());

如果 EDM 属性的类型为 int,则生成的代码将为 int 类型。EDM 属性来自数据库本身,因此如果它不是直接转换为时间的类型,则需要有一个新方法(可能在帮助程序中的某个地方),将其转换为时间。这种新方法必须(由团队中的其他人)维护,这意味着一个弱点,因为如果有人更改列名,现在代码将不会再次正确生成。

错误也可能无法通过错误日志获得,因为大多数属性在某些时候也往往会在 javascript 中被引用(这通常也会产生,现在不能用于本专栏,因为它是一种特殊情况) .我还谈到了大约 20 列遭受此问题的困扰,因此这很有可能很快变成一团深深纠结的意大利面条。

最佳答案

您似乎真的在尝试存储持续时间,而不是时间。 TIME 用于存储时间点,而不是时间量。我会选择一些时间分割(秒、毫秒等),并将其存储为 int(或 bigint,如有必要)。然后在 SQL Server 中,您可以使用 DATEADD(SECOND,@storedValue,@dateToChange) 来计算真实时间或 DateTime.Add.Milliseconds(storedValue)DateTime .Add.Seconds(storedValue),依此类推,在 C# 中尝试计算所需时间时。

如果我遗漏了什么,请告诉我。

关于c# - MS SQL如何记录负时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30924212/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com