asp.net mvc - mvc - Se produjo un desbordamiento al convertir a datetime utilizando EF4
entity framework code first mvc 5 (3)
Esta es una vieja pregunta ... pero tal vez alguien pueda encontrar esto útil:
Resolví el problema (MVC4, EF5, SqlServerCE 4.0) usando la siguiente definición:
public DateTime? DateFrom { get; set; }
public DateTime? DateTo { get; set; }
¡Que te diviertas!
Tengo una aplicación de Windows que trabaja con una base de datos SQL Compact 4.0, que utiliza EF 4.1 y el enfoque de código primero. No puedo guardar un objeto en la base de datos porque recibo una excepción, con la excepción interna "Se produjo un desbordamiento al convertir a datetime" al intentar guardar el tipo de presupuesto:
public class Quotation
{
public int ID { get; set; }
public string Name { get; set; }
public DateTime DateCreated { get; set; }
public ContactPerson ContactPersonAssigned { get; set; }
public string OurReference { get; set; }
public string QuotationDataString { get; set; }
}
Leí que este error puede deberse a una falta de coincidencia entre la configuración de mi aplicación y la configuración de la base de datos compacta de SQL con respecto a la conversión de una fecha. No estoy seguro de eso, ya que mi archivo de base de datos sdf tiene un campo que se llama correctamente "DateCreated", no puede ser anulable y de tipo "datetime".
Soy nuevo en SQL compacto. ¿Podrías ayudarme a solucionar este problema?
Si su modelo tiene propiedades no anulables de tipo DateTime, cuando publica un formulario con un valor vacío para esa propiedad, se establece automáticamente en DateTime.MinValue, que está en .net 01/01/0001 ( DateTime.MinValue en MSDN )
(Como nota al margen, puede cambiar este comportamiento implementando su propio IModelBinder
para DateTime, lo que podría IModelBinder
una excepción de validación si el valor del intento es nulo / vacío y la propiedad no es anulable).
Si intenta guardar ese valor ( DateTime.MinValue
) en la base de datos, obtendrá un error de conversión si el campo de la base de datos es de tipo sql datetime, porque .net DateTime.MinValue es menor que el valor mínimo de SQL datetime (01/01/1753) y, por lo tanto no se puede convertir a valor sql. ( Valor mínimo de datetime SQL en MSDN )
Este error no se producirá en las versiones más recientes de MS SQL Server, que tienen el tipo de datos datetime2 que permite valores del 01/01/0001 al 31/12/9999 ( datetime2 de SQL en MSDN ) (si se usa datetime2 para ese campo, por supuesto) .
Tenía el mismo problema: la propiedad de fecha y hora que se guardaba en un objeto en la base de datos era inicialmente nula.
Verifique que se haya asignado realmente una fecha y hora antes de guardar el objeto en la base de datos local de CE.