Как сопоставить TimeSpan с более чем 24 часами для SQL Server Code First?

Я пытаюсь сопоставить свойство TimeSpan Code First с SQL-сервером. Код Сначала, кажется, создает его как время (7) в SQL. Однако TimeSpan в .Net может обрабатывать более длительные периоды, чем 24 часа, и мне нужно хранить дольше 24 часов для длины события. Каков наилучший способ справиться с этим с помощью Code First.

Ответ 1

Как и в предыдущем вопросе о том, как хранить TimeSpan в SQL, мне было рекомендовано хранить его как секунды или билеты и т.д. В конце концов я не сопоставлял TimeSpan, поскольку на SQL-сервере нет эквивалента. Я просто создал второе поле, которое преобразует TimeSpan в тики и хранит это в БД. Затем я запретил хранить TimeSpan

public Int64 ValidityPeriodTicks { get; set; }

[NotMapped]
public TimeSpan ValidityPeriod
{
    get { return TimeSpan.FromTicks(ValidityPeriodTicks); }
    set { ValidityPeriodTicks = value.Ticks; }
}

Ответ 2

Насколько я знаю, нет эквивалентного типа данных в SQL Server для .NET TimeSpan. Самое близкое совпадение - Time, но, как вы указали, оно поддерживает только значения до 24 часов? http://msdn.microsoft.com/en-us/library/ms186724.aspx#DateandTimeDataTypes.

Следующий документ MSDN описывает этот http://msdn.microsoft.com/en-us/library/bb386909.aspx. Я предполагаю, что, поскольку там нет решения, в настоящее время это невозможно.

Ответ 3

Прежде всего, MVC не имеет ничего общего с этой проблемой. Он полностью связан с EF Code First и SQL Server, поэтому он имеет значение DAL.

Одним из решений может быть предоставление настраиваемого типа столбца в конфигурации вашего объекта, например:

modelBuilder
.Entity<MyClass>()
.Property(c => c.MyTimeSpan)
.HasColumnType("whatever sql type you want to use");