Linq to SQL DateTime 値はローカルです (種類 = 未指定) - UTC にするにはどうすればよいですか? 質問する

Linq to SQL DateTime 値はローカルです (種類 = 未指定) - UTC にするにはどうすればよいですか? 質問する

特定の DateTime プロパティを UTC として扱う必要がある (つまり、DateTime 型の Kind プロパティをデフォルトで Utc にする) ことを Linq To SQL クラスに指示する (簡単な) 方法はないのでしょうか、それとも「クリーンな」回避策があるのでしょうか。

私のアプリケーション サーバーのタイム ゾーンは SQL 2005 Server と同じではありません (変更できません)。また、UTC もありません。 DateTime タイプのプロパティを dB に永続化する場合、UTC 値を使用します (したがって、db 列の値は UTC です)。ただし、値を読み戻すと (Linq To SQL を使用して)、DateTime 値の .Kind プロパティが 'Unspecified' になります。

問題は、UTC に「変換」すると 4 時間ずれてしまうことです。これは、シリアル化されると、クライアント側で 4 時間の間違ったオフセットになってしまうことも意味します (UTC を使用してシリアル化されるため)。

ベストアンサー1

生成された LinqToSql コードには拡張ポイントが用意されているため、オブジェクトが読み込まれるときに値を設定できます。

重要なのは、生成されたクラスを拡張する部分クラスを作成し、OnLoaded部分メソッドを実装することです。

たとえば、クラスが であるとすると、にPerson部分クラスが生成されます。PersonBlah.designer.cs

次のように、新しいクラス (別のファイル内にある必要があります) を作成して部分クラスを拡張します。

public partial class Person {

  partial void OnLoaded() {
    this._BirthDate = DateTime.SpecifyKind(this._BirthDate, DateTimeKind.Utc);
  }
}

おすすめ記事