sql-server - por - obtener hora sql server
¿Cómo puedo asignar TimeSpan con más de 24 horas al código del servidor SQL primero? (3)
Estoy intentando asignar una propiedad TimeSpan Code First al servidor SQL. Code First parece estar creando como un tiempo (7) en SQL. Sin embargo, TimeSpan en .Net puede manejar períodos más largos de 24 horas y necesito almacenar más de 24 horas para la duración del evento. ¿Cuál es la mejor manera de manejar esto con Code First?
Antes que nada, MVC no tiene nada que ver con este problema. Está completamente relacionado con EF Code First y SQL Server, por lo que es un asunto de DAL.
Una solución podría ser proporcionar un tipo de columna personalizado en la configuración de su entidad, como esta:
modelBuilder
.Entity<MyClass>()
.Property(c => c.MyTimeSpan)
.HasColumnType("whatever sql type you want to use");
Por lo que yo sé, no existe un tipo de datos equivalente en SQL Server para TimeSpan de .NET. La coincidencia más cercana es Tiempo, pero, como señaló, solo admite valores de hasta 24 horas. http://msdn.microsoft.com/en-us/library/ms186724.aspx#DateandTimeDataTypes .
El siguiente documento de MSDN describe este http://msdn.microsoft.com/en-us/library/bb386909.aspx . Supongo que, dado que no hay ninguna solución allí, actualmente no es posible.
Según mi pregunta anterior sobre cómo almacenar TimeSpan en SQL, me aconsejaron que la almacenara como segundos o tickets, etc. Al final, no correlacioné la columna TimeSpan ya que no hay un equivalente en el servidor SQL. Simplemente creé un segundo campo que convirtió TimeSpan en ticks y lo guardé en DB. Luego evité almacenar el TimeSpan
public Int64 ValidityPeriodTicks { get; set; }
[NotMapped]
public TimeSpan ValidityPeriod
{
get { return TimeSpan.FromTicks(ValidityPeriodTicks); }
set { ValidityPeriodTicks = value.Ticks; }
}
Si desea hacer esto en EF Core, es mucho más limpio ya que puede usar Value Conversions . En 2.1, puede usar conversiones de valor y TimeSpanToTicksConverter para correlacionar timespans a ticks en la base de datos de forma transparente. Por lo tanto, ciertamente vale la pena considerar EF Core (suponiendo que otras características cumplan con las necesidades): puede usarlo en proyectos de Framework 4.7, por lo que no es necesario cambiar a .Net Core.