小编Ste*_*ell的帖子

C#,WCF和DateTime.MinValue()与Null Date

我已经四处搜索但尚未找到令人满意的答案:

概述:我正在开发一个小应用程序,它使用WCF将多个DateTime字段用于单个表.我们正在尝试消除所有表中的空字段.到目前为止,每当我们转换从表中选择的日期时间字段时,我们首先在显示或"使用"它之前验证它是否为空.如果值为NULL,则替换DateTime.MinValue该值.由于我们现在正在删除所有字段的可空方面,我们需要插入一个表示null的公共值; 因为DateTime.MinValue()在代码中的任何地方被替换,所以作为空替换放入字段似乎是一个可行的值.

问题:插入一个DateTime.MinValue()导致通用"执行此请求的问题"错误.

解?:正如其他地方所述,DateTime.MinValue()有一个未指定的DateTimeKind所以...我们添加ToUniversalTime调用,如:

DateTime nullDate = DateTime.MinValue.ToUniversalTime(); // 1/1/0001 6:00:00 AM
Run Code Online (Sandbox Code Playgroud)

这不起作用,可能是因为在WCF上的日期转换中有一些"可接受的范围"设置?

注释中注明的是"1/1/0001 6:00 am"的结果值.奇怪的是早上6点或一年"1",这似乎很好.(考虑到过去的默认年份,如1970年代上午12:00仍然是相当标准的,但我离题...)

是的,我知道DateTime不是C#,它是.NET.我也知道WCF在其转换限制内允许某种形式的"min"和"max"次.我不知道如何设置它们(我也不知道如何设置VerboseMessages位;我对WCF很新.)

手动创建一个可以很好地转换为表的新字段值的建议是可行的,并且它可以工作:

DateTime nullDate = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
Run Code Online (Sandbox Code Playgroud)

(顺便说一句,如果我们使用第1年而不是1970年(例如),插入也将失败.)

即使我们使用上面的nullDate作为可行的替代品......问题是代码中的任何地方我们仍然在评估DateTime.MinValue()表示空日期,并且这两个日期并不完全相同.

我能想到的唯一可行的解​​决方案是覆盖或以其他方式从DateTime创建扩展类以创建公共NullDate并相应地修改所有代码.

有没有人看到一个很好的选择?有没有人知道插入System.DateTime.MinValue()WCF表的解决方案,比如改变好/坏日期的可接受边界?

我觉得我必须咬紧牙关并改变对MinValue的所有引用......我试图避免这种情况,因为它在评估"默认"值时没有遵循任何标准的逻辑思想.

有人建议吗?

c# wcf datetime

5
推荐指数
1
解决办法
2798
查看次数

标签 统计

c# ×1

datetime ×1

wcf ×1