So wie der Fehler aussieht, verwendet Ihre Datenbank SmallDateTime als Datumstyp. Sein Mindestwert ist 1900-Jan-01. Angenommen, Ihre Entität ist so etwas wie unten
public class Game
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid GameId { get; set; }
[Required]
public DateTime GameTime { get; set; }
}
Ihr GameTime-Wert kann nicht auf Null gesetzt werden. Wenn Sie also keinen Wert dafür festlegen, ist es immer DateTime.Min, also 0000-Jan-01. Dies liegt außerhalb des Bereichs von SmallDateTime, aber im Bereich von DateTime2. Daher versucht EF, einen DateTime2-SQL-Typ an den SQL-Server zu übergeben. Da Ihre Datenbank SmallDateTime verwendet, erhalten Sie den in Ihrer Frage gezeigten Fehler.
Um das Problem zu lösen, haben Sie folgende Optionen, die mir einfallen:
-
Machen Sie das Feld nullalbe. (Sie müssen immer prüfen, ob Ihre Eingabedaten innerhalb des SmallDateTime-Bereichs liegen.)
-
oder ändern Sie den Datumstyp in DateTime2 in SQL Server
-
oder zwingen Sie EF, den DateTime2-Datentyp beim Erstellen der Datenbank zu verwenden. Der Code wird wie unten aussehen. (Diese Methode sollte innerhalb Ihrer Kontextklasse sein.)
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.Property(t => t.GameTime )
.HasColumnType("datetime2");
}
-
Schreiben Sie einen Hilfskonverter, um den Mindestwert Ihrer DateTime-Eigenschaft so einzustellen, dass er in Ihrer Anwendung mit smalldatetime übereinstimmt.
-
Schreiben Sie einen Trigger in die Datenbank, um DateTime2 (vom Anwendungsende, aber datetime2 am Datenbankende) in smalldatetime umzuwandeln.
Hoffentlich habe ich Ihre Frage richtig verstanden und meine Antwort hilft weiter.