rango por operaciones obtener insertar hora formato filtrar fechas fecha entre ejemplo diferencia con sql-server entity-framework ef-code-first code-first

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");



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.