2014-10-26 12 views
16

mein Modell enthält eine Nullable Datetime-Eigenschaft. Im mit CodeFirstwie Null Datetime in Datenbank mit Entity Framework CodeFirst einfügen

public DateTime? GoDate { get; set; } 

Ich mag eine Nullvalue in dieses Feld einfügen aber EF fügt das übliche 00/00/0001 Datum statt null, was mir auch einen Fehler gibt.

im Microsoft SQL Server 2012.

DateTime? date = null; 
var entity = new Model() 
       { 
        GoDate = date 
       }; 

DataContext.Models.Add(entity); 
DataContext.SaveChanges(); 

geben Sie mir den Fehler mit.

Die Konvertierung eines datetime2-Datentyps in einen datetime-Datentyp führte zu einem Wert außerhalb des Bereichs. \ R \ nDie Anweisung wurde beendet.

Das ist, weil sql Server Datetime nicht 00/00/0001 haben kann, die EF automatisch generiert, sobald es ein Null Datetime in die Datenbank einfügt.

Ich möchte Null in die db einfügen.

+0

Welche Datenbank benutzen Sie? SQL Server? Wenn du sagst, dass es "dir [einen] Fehler gibt", welchen Fehler bekommst du? Verwenden Sie zuerst DB oder Code zuerst? – akton

+0

Wo ist der Code zum Einfügen ?? – walther

+0

Verwenden von Nullable oder DateTime? sollte es akzeptieren, NULL. Ist die Spalte in der Datenbank als "NOT NULL" markiert? – akton

Antwort

11

EF fügt das übliche 00/00/0001 Datum statt null

Es gibt nichts üblich darüber. Auf sich selbst gestellt fügt EF 6.1 NULL ein.

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var DataContext = new StackOverflowContext(); 

      DateTime? date = null; 
      var entity = new Model() 
      { 
       GoDate = date 
      }; 

      DataContext.Models.Add(entity); 
      DataContext.SaveChanges(); 
     } 
    } 

    class Model 
    { 
     public int ModelId { get; set; } 

     public DateTime? GoDate { get; set; } 
    } 

    class StackOverflowContext : DbContext 
    { 
     public DbSet<Model> Models { get; set; } 
    } 
} 

enter image description here

Es ist höchstwahrscheinlich Ihre Zuordnungen oder Datenbankschema falsch sind.

1

Sie können diese verwenden:

Nullable<DateTime> date=null; 
var entity = new Model() 
      { 
       GoDate = date 
      }; 

    DataContext.Models.Add(entity); 
    DataContext.SaveChanges(); 
2

Oder Sie können wie folgt einfach einstellen:

var entity= new Model 
{ 
    GoDate = (DateTime?) null 
} 
DataContext.Models.Add(entity); 
DataContext.SaveChanges(); 

Ich denke, es ist ein wenig sauberer ist.

1

Sie können so etwas in Ihrem Modell verwenden. Dann funktioniert das Senden von Null von Ihrem Controller gut.

[DataType(DataType.Date)] 
     [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] 
     [Display(Name = "Date")] 
     public DateTime? Date { get; set; } 

Beachten Sie die "?" vor dem DateTime Datum

Verwandte Themen