TrackError
специально для отслеживания обнаруженных исключений.
Единственный способ, которым я могу думать, это добавить свойство shim в частичный класс, который выполняет перевод ...
DateTime SQL Server не включает никаких информация о часовом поясе или DateTimeKind, поэтому значения DateTime, правильно извлеченные из базы данных, имеют Kind = DateTimeKind.Unspecified.
Если вы хотите сделать это время в формате UTC, вы должны «преобразовать» их следующим образом:
DateTime utcDateTime = new DateTime(databaseDateTime.Ticks, DateTimeKind.Utc);
или эквивалент:
DateTime utcDateTime = DateTime.SpecifyKind(databaseDateTime, DateTimeKind.Utc);
Я предполагаю, что ваша проблема в том, что вы пытаетесь преобразовать их следующим образом:
DateTime utcDateTime = databaseDateTime.ToUniversalTime();
На первый взгляд это может показаться разумным, но согласно документации MSDN для DateTime.ToUniversalTime при преобразовании DateTime, Kind не указано:
Предполагается, что текущий объект DateTime быть местным временем, а преобразование выполняется так, как если бы Kind был Local.
Такое поведение необходимо для обратной совместимости с .NET 1.x, у которого не было свойства DateTime.Kind.
Пара разных способов сделать это:
Я хочу, чтобы UTC, класс TimeZone может сделать это за вас, если вы хотите конвертировать между разными часовыми поясами, TimeZoneInfo для вас. Пример из моего кода с TimeZoneInfo:
TimeZoneInfo cet = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time");
ac.add_datetime = TimeZoneInfo.ConvertTime(DateTime.Now, cet);
Сгенерированный код LinqToSql предоставляет точки расширяемости, поэтому вы можете устанавливать значения при загрузке объектов.
Ключ состоит в том, чтобы создать частичный класс, который расширяет сгенерированный класс, а затем реализовать частичный метод OnLoaded
.
Например, предположим, что ваш класс - Person
, поэтому у вас есть сгенерированный частичный класс Person
в Blah.designer.cs
.
Расширьте частичный класс, создав новый класс (должен находиться в другом файле), как показано ниже:
public partial class Person {
partial void OnLoaded() {
this._BirthDate = DateTime.SpecifyKind(this._BirthDate, DateTimeKind.Utc);
}
}