Castle ActiveRecord — могу ли я использовать тип данных SQL Server 2008 «time»?

#castle-activerecord

#castle-activerecord

Вопрос:

Я работаю над проектом, в котором мне нужно отслеживать время, например, «14:15 вечера» без дат. Я использую Castle ActiveRecord. Есть ли способ, которым я могу указать, используя атрибуты Castle, что я хочу, чтобы мое поле было типом данных time в SQL Server 2008? И если да, то что .Какой тип я должен создать для поля? Дата-время?

Кроме того, мне может потребоваться привязать часовые пояса к этим временам. Какой наилучший способ сделать это с использованием Castle ActiveRecord и SQL Server 2008?

Ответ №1:

Согласно документам MSDN, тип данных time соответствует типу TimeSpan .net, а тип NHibernate равен «TimeAsTimeSpan». В ActiveRecord вы бы использовали свойство ColumnType для определения этого, смотрите этот пример.

Если вы хотите включить часовые пояса, я рекомендую вместо этого использовать DateTimeOffset. Я не понимаю, как часовые пояса будут иметь смысл во временном интервале… Или сохраните часовой пояс в отдельном поле и выполните преобразования самостоятельно…

Комментарии:

1. Я, вероятно, сохраню часовые пояса в отдельном поле, просто сохраненном как varchar на основе . Сетевое имя для каждого часового пояса. Что касается самого времени, я экспериментировал с TimeSpan, но хранить его таким образом для меня не имеет особого смысла, поскольку TimeSpan рассчитан на отрезок времени, а не на тактовое время.

2. После дополнительных экспериментов я решил использовать TimeSpan (преобразование в time тип данных). Основная проблема заключалась в преобразовании туда и обратно между TimeSpan и отображением времени (например, «14:00 вечера»). Но, похоже, все работает нормально, если я сначала вызываю DateTime.Parse строку TimeSpan , а затем использую формат «t».