sql >> Database >  >> RDS >> Sqlserver

De conversie van een datetime2-gegevenstype naar een smalldatetime-gegevenstype resulteerde in een waarde die buiten het bereik ligt.\r\nDe instructie is beëindigd

Gezien de fout, gebruikt uw database SmallDateTime als datumtype. De minimale waarde is 1900-Jan-01. Ervan uitgaande dat uw entiteit zoiets is als hieronder

  public class Game
  {
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid GameId { get; set; }

    [Required]
    public DateTime GameTime { get; set; }
  }

Uw GameTime-waarde is niet nullable, dus als u er geen waarde voor instelt, is dit altijd de DateTime.Min, die 0000-Jan-01 is. Dit valt buiten het bereik van SmallDateTime, maar binnen het bereik van DateTime2. Dus EF zal proberen een DateTime2 SQL-type door te geven aan de SQL-server. Omdat uw database SmallDateTime gebruikt, krijgt u de foutmelding die in uw vraag wordt weergegeven.

Om het probleem op te lossen, heb je de volgende opties die ik kan bedenken:

  • maak het veld nullalbe. (u moet altijd controleren of uw invoerdatums binnen het SmallDateTime-bereik vallen.)

  • of verander het datumtype in DateTime2 in SQL server

  • of dwing EF om het datatype DateTime2 te gebruiken bij het maken van een database. De code zal zijn als iets hieronder. (Deze methode moet binnen uw contextklasse vallen.)


  protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity()
            .Property(t => t.GameTime )
            .HasColumnType("datetime2");
    }
  • Schrijf een conversiehulpmiddel om de minimale waarde van uw DateTime-eigenschap in te stellen op smalldatetime in uw toepassing.

  • Schrijf een trigger in de database om DateTime2 (van applicatie-einde, maar datetime2 in database-einde) naar smalldatetime te converteren.

Hopelijk heb ik je vraag goed begrepen en helpt mijn antwoord.




  1. MySQL, beter om NULL of lege string in te voegen?

  2. Een SQL Server Agent-taak in meerdere stappen (T-SQL) maken

  3. MySQL Workbench toont resultaten als BLOB

  4. COMMENT ON verwijderen van alle objecten in PostgreSQL