2010-01-19 7 views
0

Je suis en train de mettre à jour un objet, et d'obtenir:asp.net mvc: problème de SQLDateTimeOverflow avec Entity Framework

SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM. 

Il y a deux champs dans l'objet qui sont des objets DateTime, et ils sont mis à :

obj.created_date = DateTime.Now; 
    obj.modified_date = DateTime.Now; 

Sauf que tout semble raisonnable quand je considère l'objet:

>? obj.created_date 
{1/13/2010 4:02:47 PM} 
    Date: {1/13/2010 12:00:00 AM} 
    Day: 13 
    DayOfWeek: Wednesday 
    DayOfYear: 13 
    Hour: 16 
    Kind: Unspecified 
    Millisecond: 817 
    Minute: 2 
    Month: 1 
    Second: 47 
    Ticks: 633989953678170000 
    TimeOfDay: {16:02:47.8170000} 
    Year: 2010 
>? obj.modified_date 
{1/19/2010 12:20:50 PM} 
    Date: {1/19/2010 12:00:00 AM} 
    Day: 19 
    DayOfWeek: Tuesday 
    DayOfYear: 19 
    Hour: 12 
    Kind: Local 
    Millisecond: 333 
    Minute: 20 
    Month: 1 
    Second: 50 
    Ticks: 633995004503331818 
    TimeOfDay: {12:20:50.3331818} 
    Year: 2010 

Toute idée de ce qui se passe sur? Même en lisant les champs de la base de données, puis en essayant de les sauvegarder sans modifications, provoque l'erreur. Les autres classes n'ont aucun problème, et je ne vois aucune différence qui expliquerait cette erreur.

J'ai ajouté

<globalization culture="en-US" /> 

à mon web.config, sans changement.

Ces problèmes sont sur mon dev locale

+0

pourriez-vous poster un code de exactement ce que vous faites lorsque vous accédez et enregistrez les objets s'il vous plaît? – bobwah

+2

juste deviner - existe-t-il encore une autre propriété DateTime quelque part, qui pourrait ne pas être initialisée (et est donc définie sur 0/0/0001?). Les deux que vous montrez sont d'accord, ceux-ci ne causent certainement aucun problème. –

Répondre

0

OK, voici ce qui se passait. marc_s a eu la bonne idée.

Il y a été liant gérer les mises à jour:

TryUpdateModel(editItem, new string[] { "LookupTable", "TextField1", "TextField2" }); 

J'ai enlevé le « LookupTable » de l'appel à TryUpdateModel, et à la place manient la valeur dans le liant avec:

var fkid = Convert.ToInt32(controllerContext.HttpContext.Request.Form["LookupTable.ID"]); 
    EntityKey ek = new EntityKey("entities.LookupTable", "ID", fkid); 
    obj.LookupTableReference.EntityKey = ek; 

Apparemment, la EF essayait de mettre à jour la valeur LookupTable pour une raison quelconque.

Questions connexes