Från utseendet på felet använder din databas SmallDateTime som datumtyp. Dess lägsta värde är 1900-jan-01. Förutsatt att din enhet är ungefär som nedan
public class Game
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid GameId { get; set; }
[Required]
public DateTime GameTime { get; set; }
}
Ditt GameTime-värde är inte nullbart, så när du inte anger något värde för det kommer det alltid att vara DateTime.Min som är 0000-Jan-01. Detta är utanför intervallet för SmallDateTime, men det är inom intervallet DateTime2. Så EF kommer att försöka skicka en DateTime2 SQL-typ till SQL-servern. Eftersom din databas använder SmallDateTime får du felet som visas i din fråga.
För att lösa problemet har du följande alternativ som jag kan tänka mig:
-
göra fältet nullalbe. (du måste alltid kontrollera om dina inmatningsdatum ligger inom SmallDateTime-intervallet.)
-
eller ändra datumtypen till DateTime2 i SQL-servern
-
eller tvinga EF att använda datatypen DateTime2 när databasen skapas. Koden kommer att vara som något nedan. (Denna metod bör vara inuti din kontextklass.)
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.Property(t => t.GameTime )
.HasColumnType("datetime2");
}
-
Skriv en omvandlingshjälp för att ställa in min-värdet för din DateTime-egenskap så att den matchar smalldatetime i din applikation.
-
Skriv en trigger i databasen för att konvertera DateTime2 (från applikationsslutet, men datetime2 i databasens slut) till smalldatetime.
Förhoppningsvis har jag förstått din fråga ordentligt, och mitt svar hjälper.