Ud fra fejlens udseende bruger din database SmallDateTime som datotype. Dens minimumværdi er 1900-jan-01. Forudsat at din enhed er noget som nedenfor
public class Game
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid GameId { get; set; }
[Required]
public DateTime GameTime { get; set; }
}
Din GameTime-værdi er ikke nullbar, så når du ikke angiver nogen værdi for den, vil det altid være DateTime.Min, som er 0000-Jan-01. Dette er uden for rækkevidde af SmallDateTime, men det er inden for rækkevidde af DateTime2. Så EF vil forsøge at sende en DateTime2 SQL-type til SQL-serveren. Fordi din database bruger SmallDateTime, vil du få fejlen vist i dit spørgsmål.
For at løse problemet har du følgende muligheder, som jeg kan komme i tanke om:
-
gøre feltet nullalbe. (du skal altid kontrollere, om dine inputdatoer er inden for SmallDateTime-intervallet.)
-
eller skift datotypen til DateTime2 i SQL-serveren
-
eller tving EF til at bruge DateTime2-datatypen ved oprettelse af database. Koden vil være som noget nedenfor. (Denne metode skal være inde i din kontekstklasse.)
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.Property(t => t.GameTime )
.HasColumnType("datetime2");
}
-
Skriv en konverterhjælper for at indstille min værdi for din DateTime-egenskab, så den matcher smalldatetime i din applikation.
-
Skriv en trigger i databasen for at konvertere DateTime2 (fra programslut, men datetime2 i databaseslut) til smalldatetime.
Forhåbentlig har jeg forstået dit spørgsmål korrekt, og mit svar hjælper.