У меня есть типизированный столбец XML, в котором я храню сериализацию из объекта C # со свойством DateTime. Этот DateTime имеет локальный тип, когда я сохраняю его в БД, хотя в сериализованном XML-формате время показывается со смещением по времени GT, как в
'2009-09-22T13: 52: 32.2346252-07: 00' (я живу в Орегоне).
Когда я читаю таблицу (из SQL Management Studio), XML показывает объект DateTime в формате UTC.
Есть ли способ контролировать это поведение? Для меня важно уважать часовой пояс данных, которые я ввел, поскольку они могут поступать из разных источников, и я должен это учитывать, когда извлекаю их.
Я также не хочу преобразовывать каждое поле даты и времени из UTC в локальное после того, как я прочитал объекты из БД.
это определение C # объекта, который я храню:
[Serializable]
[XmlType(Namespace="urn://MySchema")]
public class MyObject
{
public DateTime RecordTime { get; set; }
// .. omitted for clarity
}
Это определение таблицы (упрощено для ясности)
CREATE TABLE MyTable(
[ID] [int] IDENTITY(1,1) NOT NULL,
[MyKey] [int] NULL,
[TheObject] [xml](CONTENT [dbo].[MySchema]) NULL,
CONSTRAINT [PK_MyTable] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
Вот так выглядит мой росток (тоже упрощенно)
ALTER PROCEDURE [dbo].[SaveMyObjects]
@where int,
@object xml
AS
BEGIN
INSERT INTO MyTable
(MyKey, TheObject)
VALUES(@where, @object)
END
Мне нужно сделать 2 вещи по-разному:
- Я хочу контролировать формат строки даты в сериализованном XML -
Я бы предпочел формат ISO для этой временной строки
- Я не хочу, чтобы DateTime конвертировался в UTC, когда
Я храню это в БД, но я хотел бы удобство хранения как
Поле DateTime.
Как мне это сделать? Буду очень признателен за любую идею, указатель, ссылку на блог какого-нибудь бога, показывающий мои ошибки и т. Д.