35 messaggi dal 31 marzo 2010
Ciao a tutti, mi sta succedendo una cosa un pò strana con l'applicazione web che sto sviluppando:
da un campo input su una pagina web inserisco una data in formato dd/mm/yyyy questo input viene riconosciuto correttamente come proprietà DateTime della mia classe modello di input al metodo sul controller.

Quando vada a salvare i dati a db tramite entity framework, vengono salvati tutti i valori ma la data viene ignorata. (Rimane campo null sul db)

I ho creato il modello edmx da un database esistente in locale da me sui cui gira un sqlserver in italiano invece il database di produzione utilizza sqlserver in inglese.

Infatti se inserisco la data in formato MM/dd/yyyy, questa viene correttamente persistita sul db.

Ma non è un pò strano? Nel senso: un DateTime è un datetime! La cultura è solo la sua rappresentazione o sbaglio?
Poi EntityFramework non dovrebbe accollarsi l'onere della trasformazione?
Certo l'edmx che ho pubblicato è quello di sviluppo perchè da li l'ho generato...
Ho provato anche a disabilitare la validazione prima del savechanges ma questo non ha prodotto effetti...allego pezzettino di codice (banale)

 
 using (var context = new CVZ2015DB())
 {
   CALCIATORI c = new CALCIATORI{
   RUOLO = player.RoleId;
   CALCIATORE = player.FullName;
   DATANASCITA = player.BirthDate;
 }

 context.CALCIATORI.Add(c);
 context.SaveChanges();

 return c.ID;
}
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
bisogna capire a che livello fallisce la trasformazione della data. In questo momento penso che Entity Framework e Sql Server non c'entrino perché, di solito, quel che fallisce è il parsing da stringa a DateTime. In un'applicazione ASP.NET MVC, questo si verifica nel momento in cui il Model Binder legge il valore dal form e prova a parsarlo per valorizzare la tua proprietà DateTime.

Nel farlo, va ad utilizzare il formato della culture corrente che, nel tuo caso, è l'inglese americano (se non ho capito male).
Dovresti modificare la culture in modo che sia sempre l'italiano, così che il Model Binder sappia che deve interpretare la data nel nostro formato gg/mm/aaaa.

Nel web.config metti:
<system.web>
  <globalization culture="it-IT" uiCulture="it-IT" />
</system.web>

Dopodiché dovresti verificare che l'impostazione abbia avuto effetto. Nell'action che riceve i dati del post logga il valore della tua proprietà DateTime e verifica che sia stata valorizzata correttamente dal Model Binder, inoltre logga anche il valore di System.Threading.Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName.
Meglio ancora sarebbe fare debugging remoto (es. se stai pubblicando su Azure).

ciao,
Moreno
Modificato da BrightSoul il 11 ottobre 2015 16.43 -

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.