我已经四处搜索,但尚未为我的问题找到令人满意的答案:
概述:我正在开发一个小型应用程序,该应用程序使用 WCF 将多个 DateTime 字段用于单个表。我们正在尝试消除所有表中的空字段。到目前为止,每当我们转换从表中选择的日期时间字段时,我们首先验证它是否为空,然后再显示或以其他方式“使用”它。如果该值为 NULL,我们替换DateTime.MinValue
该值。由于我们现在要删除所有字段的可空方面,我们需要插入一个表示空的公共值;由于DateTime.MinValue()
在代码中的任何地方都被替换,因此将其作为空替换放入字段中似乎是一个可行的值。
问题:插入 aDateTime.MinValue()
会导致一般的“执行此请求的问题”错误。
解决方案?:正如其他地方记录的那样,DateTime.MinValue()
有一个未指定的 DateTimeKind 所以......我们添加了 ToUniversalTime 调用,如下所示:
DateTime nullDate = DateTime.MinValue.ToUniversalTime(); // 1/1/0001 6:00:00 AM
这不起作用,可能是因为 WCF 上的日期转换中的一些“可接受范围”设置?
注释中指出的是“1/1/0001 6:00 am”的结果值。奇怪的早上 6:00 或“1”年除外,这似乎很好。(考虑到过去的默认年份,如 1970 年 12:00 AM 仍然是相当标准的,但我离题了......)
是的,我知道 DateTime 不是 C#,它是 .NET。我也知道 WCF 在其转换约束内允许某种形式的“最小”和“最大”时间。我不知道如何设置这些(我也不知道如何设置 VerboseMessages 位;我对 WCF 还很陌生。)
手动创建一个可以很好地转换为表格的新字段值的建议是可行的,并且有效:
DateTime nullDate = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
(顺便说一句,如果我们使用 1 年而不是 1970 年(例如)插入也会失败。)
即使我们使用上面的 nullDate 作为一个可行的替代品......问题是在代码中的任何地方我们仍然在评估DateTime.MinValue()
代表一个空日期,而这两个日期并不完全相同。
我能想到的唯一可行的解决方案是覆盖或以其他方式从 DateTime 创建一个扩展类,以创建一个通用的 NullDate 并相应地修改所有代码。
有没有人看到一个好的选择?有谁知道将 插入System.DateTime.MinValue()
WCF 表的解决方案,例如更改好/坏日期的可接受边界?
我觉得我将不得不硬着头皮改变所有对 MinValue 的引用......我试图避免这种情况,因为它在评估“默认”值时不遵循任何标准的逻辑思想。
建议任何人?