是否没有一种(简单的)方法来告诉 Linq To SQL 类某个特定的 DateTime 属性应该被视为 UTC(即默认情况下 DateTime 类型的 Kind 属性为 Utc),或者是否有 '干净的解决方法?
我的应用服务器上的时区与 SQL 2005 服务器上的时区不同(无法更改),而且都不是 UTC。当我将 DateTime 类型的属性持久化到 dB 时,我使用 UTC 值(因此 db 列中的值是 UTC),但是当我读回这些值时(使用 Linq To SQL),我得到了 DateTime 的 .Kind 属性值为“未指定”。
问题是,当我将它“转换”为 UTC 时,它有 4 个小时的休息时间。这也意味着当它被序列化时,它最终在客户端有一个 4 小时的错误偏移量(因为它是使用 UTC 序列化的)。
最佳答案
生成的 LinqToSql 代码提供扩展点,因此您可以在加载对象时设置值。
关键是创建一个扩展生成类的分部类,然后实现OnLoaded
分部方法。
例如,假设您的类是 Person
,那么您在 Blah.designer.cs
中有一个生成的部分 Person
类。
通过创建一个新类(必须在不同的文件中)来扩展分部类,如下:
public partial class Person {
partial void OnLoaded() {
this._BirthDate = DateTime.SpecifyKind(this._BirthDate, DateTimeKind.Utc);
}
}
关于c# - Linq to SQL DateTime 值是本地的 (Kind=Unspecified) - 如何使其成为 UTC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/823313/