От вида на грешката вашата база данни използва SmallDateTime като тип дата. Минималната му стойност е 1900-Jan-01. Ако приемем, че вашият обект е нещо като по-долу
public class Game
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid GameId { get; set; }
[Required]
public DateTime GameTime { get; set; }
}
Вашата GameTime стойност не е nullable, така че когато не зададете никаква стойност за нея, тя винаги ще бъде DateTime.Min, която е 0000-Jan-01. Това е извън обхвата на SmallDateTime, но е в обхвата на DateTime2. Така че EF ще се опита да предаде SQL тип DateTime2 на SQL сървъра. Тъй като вашата база данни използва SmallDateTime, ще получите грешката, показана във вашия въпрос.
За да разрешите проблема, имате следните опции, за които се сещам:
-
направете полето nullalbe. (винаги трябва да проверявате дали въведените дати са в диапазона SmallDateTime.)
-
или променете типа дата на DateTime2 в SQL сървър
-
или принудете EF да използва тип данни DateTime2 при създаване на база данни. Кодът ще бъде като нещо по-долу. (Този метод трябва да е вътре във вашия контекстен клас.)
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.Property(t => t.GameTime )
.HasColumnType("datetime2");
}
-
Напишете помощник за преобразуване, за да зададете минималната стойност на свойството DateTime да съответства на smalldatetime във вашето приложение.
-
Напишете тригер в базата данни за преобразуване на DateTime2 (от края на приложението, но datetime2 в края на базата данни) в smalldatetime.
Надяваме се, че съм разбрал въпроса ви правилно и отговорът ми ще помогне.