Perché quando inserisco un valore DateTime null ho “0001-01-01” in SQL Server?

Cerco di inserire il valore null (DateTime) nel mio database per un campo digitato ‘date’ ma ottengo sempre un ‘0001-01-01’ . Non capisco, questo campo “accetta i null” e non so perché ho questo valore predefinito.

Sto usando C # asp .net con MVC (Entity Framework), questo è il mio codice:

Budget_Synthesis newBS = new Budget_Synthesis { Budget_Code = newBudgetCode, Last_Modified_Date = null }; db.Budget_Synthesis.AddObject(newBS); 

Last_Modified_Date è stato digitato System.DateTime? quindi non so perché cambino questo “nulla”.

Se provo a visualizzare il valore sulla mia applicazione ottengo 01/01/0001 00:00:00

E 0001-01-01 con SSMS

Qualcuno può spiegarmi perché non riesco a ottenere un vero ‘NULL’?

I migliori saluti

Penso che questo sia il valore corrispondente al null

Se Last_Modified_Date è di tipo DateTime , non puoi avere “null reale” perché la struttura DateTime, come già detto, non è annullabile. Quindi il tuo codice di esempio non verrà nemmeno compilato.

Se Last_Modified_Date è di tipo DateTime? ( Nullable ) il tuo codice è corretto, ma -come @Nikola Dimitroff ha detto nella sua risposta- non puoi avere “null reale” nel tuo database perché il valore predefinito per DateTime? è 01/01/0001 00:00:00.

Il “null reale” che stai cercando è DBNull.Value , ma puoi usarlo solo per il tipo System.DBNull ; se assegni Last_Modified_Date = DBNull.Value , qualunque sia il tipo di Last_Modified_Date , il tuo codice non verrà compilato.

Quando dici che stai provando a mettere un DateTime nullo, stai usando un Nullable (aka DateTime? ) O semplicemente DateTime ? Quest’ultimo è un tipo di valore e il suo valore predefinito è precisamente 01/01/0001 00:00:00