c# - Linq to SQL DateTime 值是本地的 (Kind=Unspecified) - 如何使其成为 UTC?

标签 c# sql-server linq-to-sql datetime

是否没有一种(简单的)方法来告诉 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/

相关文章:

c# - Windows 8 Store Apps 中 c# CollectionBase 的替代品是什么?

asp.net-mvc-3 - Linq to SQL 无法转换对象

asp.net-mvc - ASP.Net MVC - View 中的空对象

c# - 如何使用 C# 在 WCF 函数中的单次调用中返回多个列表

c# - 使用第一对作为种子聚合

c# - 为什么 DataGridRow IsSelected 绑定(bind)不适用于 DataGrid

Sql:查找答案是否存在

java - 从sql中的表中将数据从特定行获取到android studio中的textview

.net - 用于选择 SQL Server 和获取登录详细信息的通用对话框?

c# - LINQ 到 SQL : how to select specific fields conditionally into DTOs (performance)