2010-10-30 8 views
5

Ho un'app MVC utilizzando Entity Framework e un database SQL Server 2008. Ho usato la procedura guidata EF per generare il mio modello di dati.datetime2 e ProviderManifestToken in Entity Framework

Ho una tabella SQL Server con una colonna standard DateTime. Il modello EF utilizza System.DateTime.

Ma quando provo ad inserire un nuovo record in questa tabella dalla mia applicazione, senza specificare un valore per questa colonna DateTime, ottengo l'errore:

The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value.

I Googled un po 'e ha scoperto che le persone sono modificare edmx e cambiare il ProviderManifestToken. Ovviamente questo verrà sovrascritto, quindi c'è una soluzione più permanente o un modo per risolvere questo problema?

risposta

3

Il problema è perché, come hai detto tu, non stai impostando un valore per la proprietà DateTime sull'entità che lo fa per difetto a '0001-01-01' che è sicuramente fuori portata per datetime colonna su SQL Server. L'intervallo di date del tipo datetime è dal 1 ° gennaio 1753 al 31 dicembre 9999.

Per risolvere questo problema, bisogna o assegnare un valore gamma a quella proprietà prima di inviarlo a SQL Server, o modificare il tipo di colonna DB per datetime2 che ha un intervallo di date di 0001-01-01 attraverso 9999- 12-31.

+0

Se non si imposta esplicitamente un valore per una proprietà di entità, EF non deve inserire un valore null? – Blackcoil

+1

No, sarà impostato sul valore predefinito (DateTime) in .Net. Si noti che DateTime è un * Tipo di valore * e non può essere Null, tuttavia DateTime? può. Ci sono diversi modi in EF per inserire automaticamente questa proprietà (e fondamentalmente la proprietà di qualsiasi entità) in base al suo utilizzo. –