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?¿Cómo puedo asignar TimeSpan con más de 24 horas al código del servidor SQL primero?
Respuesta
Según mi previous question sobre cómo almacenar TimeSpan en SQL que estaba previsto para almacenarla como segundo o entradas 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. entonces me impidió almacenar el TimeSpan
public Int64 ValidityPeriodTicks { get; set; }
[NotMapped]
public TimeSpan ValidityPeriod
{
get { return TimeSpan.FromTicks(ValidityPeriodTicks); }
set { ValidityPeriodTicks = value.Ticks; }
}
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 la de proporcionar un tipo de columna personalizada en la configuración de su entidad, así:
modelBuilder
.Entity<MyClass>()
.Property(c => c.MyTimeSpan)
.HasColumnType("whatever sql type you want to use");
Ok. Es el tipo de sql que quieras usar, me importa. ¿Cuál es la forma estándar de asignar .Net TimeSpan a un campo de servidor SQL. – GraemeMiller
Pensé que era lo suficientemente claro. El parámetro de cadena del método HasColumnType debe contener su tipo SQL como lo declararía en un script sql o en un diseñador de tablas, como nvarchar (50) o bit o cualquier cosa que necesite y sea compatible con el tipo de datos .Net que está utilizando . Para cuál es el tipo exacto para usar en su caso específico, simplemente experimente. –
Supe cómo cambiar el tipo de columna, ese no es el problema. Parece que es un problema bastante común el mapeo de .Net TimeSpan a SQL. Quería saber específicamente cuál es la mejor manera de gestionar el almacenamiento de .Net TimeSpan en el servidor SQL. – GraemeMiller
Por lo que yo sé no hay ningún 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 esto http://msdn.microsoft.com/en-us/library/bb386909.aspx. Supongo que, dado que no hay ninguna solución allí, actualmente no es posible.
Sí, nunca me encontré lejos de mi respuesta. EF solo parece tomar la extraña decisión de asignarlo al tipo de datos de tiempo del servidor SQL, que obviamente es un desajuste – GraemeMiller
- 1. Cómo analizar cadenas con horas superiores a 24 en TimeSpan?
- 2. cómo convertir formato de 24 horas TimeSpan a formato de 12 horas TimeSpan?
- 3. TimeSpan FormatString con horas opcionales
- 4. Objetos de tiempo de Python con más de 24 horas
- 5. ¿Cómo convertir el tiempo del formato de 24 horas al formato de 12 horas usando javascript?
- 6. Cómo: ejecutar un bloque de código cada 24 horas en un servidor?
- 7. Convertir 12 horas a 24 horas
- 8. Almacenar más de 24 horas en un DateTime
- 9. Entity Framework 4.1Código Primero conectándose al servidor SQL 2005
- 10. Detectar configuración de 24 horas de iPhone
- 11. PHP MySQL Query más popular en las últimas 24 horas
- 12. 24 horas Restar en T-SQL a partir de hoy
- 13. Conversión de 12 horas a 24 horas en java
- 14. ¿Cómo puedo determinar si el iPhone está configurado para visualización de 12 horas o 24 horas?
- 15. ¿Cómo restringir la entrada del usuario de 24 horas de formato al campo de entrada?
- 16. Conversión de tiempo de 24 horas a 12 horas
- 17. ¿Cómo formatear DateTime a 24 horas?
- 18. ¿Cómo configurar el TimePickerDialog a 24 horas?
- 19. Representación del tiempo en Excel por encima de 24 horas
- 20. Convertir formato de 12 horas a 24 horas en Ruby
- 21. Estricto tiempo de 24 horas en JFormattedTextField
- 22. ejecutando una tarea php cada 24 horas
- 23. ¿Cómo convierto una cadena de tiempo de 12 horas en C# TimeSpan?
- 24. Solución para el análisis de TimeSpan 24:00
- 25. ¿Cuál es la mejor manera de obtener los últimos resultados de 24 horas en T-SQL?
- 26. jquery datetimepicker formato de hora de 24 horas
- 27. DateTime.Parse DD/Reloj MM/AAAA 24 horas
- 28. Buscar registros con un campo de fecha en las últimas 24 horas
- 29. NSDateFormatter dateFromString y iPhone en formato de 24 horas Confusión
- 30. ¿Cómo puedo determinar si un dispositivo está usando el formato de 12 o 24 horas?
Este enfoque puede llevar a consultas poco óptimas cuando alguien no sabe u olvida que ValidityPeriod es la propiedad NotMapped. Si se usa en un LINQ donde la consulta EF no se quejará, simplemente extraerá la colección e iterará sobre ella. Por este motivo, uno puede usar los accesadores Get/Set de la vieja moda para dejar en claro que no se deben usar en las consultas. – StanislawSwierc
De acuerdo, he ajustado mi código en mi solución para que la implementación sea más clara. – GraemeMiller
Use los métodos de extensión para obtener o establecer el valor, y debe haber menos malentendidos. – deerchao