Pela aparência do erro, seu banco de dados está usando SmallDateTime como tipo de data. Seu valor mínimo é 1900-Jan-01. Supondo que sua entidade seja algo como abaixo
public class Game
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid GameId { get; set; }
[Required]
public DateTime GameTime { get; set; }
}
Seu valor GameTime não é anulável, então quando você não definir nenhum valor para ele, sempre será o DateTime.Min que é 0000-Jan-01. Isso está fora do intervalo de SmallDateTime, mas está no intervalo de DateTime2. Portanto, o EF tentará passar um tipo SQL DateTime2 para o servidor SQL. Como seu banco de dados está usando SmallDateTime, você receberá o erro mostrado em sua pergunta.
Para resolver o problema, você tem as seguintes opções que posso pensar:
-
tornar o campo nullalbe. (você sempre deve verificar se as datas de entrada estão dentro do intervalo SmallDateTime.)
-
ou altere o tipo de data para DateTime2 no servidor SQL
-
ou force o EF a usar o tipo de dados DateTime2 ao criar o banco de dados. O código ficará como algo abaixo. (Este método deve estar dentro de sua classe de contexto.)
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.Property(t => t.GameTime )
.HasColumnType("datetime2");
}
-
Escreva um auxiliar de conversor para definir o valor mínimo da propriedade DateTime para corresponder a smalldatetime em seu aplicativo.
-
Escreva um gatilho no banco de dados para converter DateTime2 (do final do aplicativo, mas datetime2 no final do banco de dados) para smalldatetime.
Espero ter entendido sua pergunta corretamente, e minha resposta ajuda.