Un débordement s'est produit lors de la conversion en datetime en utilisant EF4

J'ai une application windows fonctionnant avec une base de données SQL Compact 4.0, en utilisant EF 4.1 et l'approche code-first. Je ne peux pas enregistrer un objet dans la base de données car je reçois une exception, avec une exception interne "Un débordement s'est produit lors de la conversion en datetime" lorsque vous essayez d'enregistrer la citation de type:

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; }
}

J'ai lu que cette erreur peut être causée par une inadéquation entre les paramètres de mon application et les paramètres de la base de données sql compact concernant la conversion d'une date. Je ne suis pas sûr il, puisque mon fichier de base de données sdf a un champ qui est correctement nommé "DateCreated", non nullable et de type"datetime".

Je suis nouveau sur SQL compact. Pourriez-vous m'aider à déboguer ce problème?

23
demandé sur Goran Obradovic 2011-07-18 13:23:46

3 réponses

Si votre modèle a une propriété non nullable de type DateTime, lorsque vous publiez un formulaire avec une valeur vide pour cette propriété, il est automatiquement défini sur DateTime.MinValue, qui est dans. NET 01/01/0001 (DateTime.MinValue sur MSDN)

(en note de côté, vous pouvez changer ce comportement en implémentant votre propre IModelBinder pour DateTime qui pourrait IE jeter une exception de validation si la valeur tentée est null / empty et la propriété n'est pas nullable).

Si vous essayez d'enregistrer cette valeur (DateTime.MinValue) dans base de données, vous obtiendrez une erreur de conversion si le champ de base de données est de type sql datetime, Car. Net DateTime.MinValue est inférieur à SQL datetime minvalue (01/01/1753) et ne peut donc pas être converti en valeur sql. (valeur SQL datetime min sur MSDN )

Cette erreur ne se produira pas sur les nouvelles versions de MS SQL Server, qui ont un type de données datetime2 qui autorise des valeurs allant du 01/01/0001 au 31/12/9999 ( SQL datetime2 sur MSDN ) (si datetime2 est utilisé pour ce champ, bien sûr).

89
répondu Goran Obradovic 2013-08-29 07:45:47

C'est une vieille question ... mais peut-être que quelqu'un pourrait trouver cela utile:

J'ai résolu le problème (MVC4, EF5, SqlServerCE 4.0) en utilisant la définition suivante:

public DateTime? DateFrom { get; set; }
public DateTime? DateTo { get; set; }

Amusez-vous!

1
répondu swissben 2013-06-14 15:06:38

J'avais le même problème, la propriété dateTime enregistrée sur un objet dans la base de données était initialement nulle.

Vérifiez qu'un datetime réel a été attribué avant d'enregistrer l'objet dans la base de données CE locale.

1
répondu IbrarMumtaz 2013-07-01 14:04:01