Как мне привязать TimeSpan с более чем 24 часами к SQL Server Code First? - PullRequest
39 голосов
/ 14 декабря 2011

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

Ответы [ 3 ]

34 голосов
/ 15 декабря 2011

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

public Int64 ValidityPeriodTicks { get; set; }

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

. Если вы хотите сделать это в EF Core, это намного чище, так как вы можете использовать Преобразование значений .В 2.1 вы можете использовать преобразования значений и TimeSpanToTicksConverter, чтобы прозрачно отобразить временные диапазоны на тики в базе данных.Поэтому, безусловно, стоит подумать о EF Core (при условии, что другие функции удовлетворяют потребности) - можете использовать его в проектах Framework 4.7, поэтому не нужно переключаться на .Net Core.

3 голосов
/ 01 февраля 2013

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

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

1 голос
/ 14 декабря 2011

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

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

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