Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Konwersja typu danych datetime2 na typ danych smalldatetime skutkowała wartością spoza zakresu.\r\nInstrukcja została zakończona

Wygląda na to, że Twoja baza danych używa SmallDateTime jako typu daty. Jego minimalna wartość to 1900-styczeń-01. Zakładając, że Twoja jednostka jest podobna do poniższej

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

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

Twoja wartość GameTime nie dopuszcza wartości null, więc jeśli nie ustawisz dla niej żadnej wartości, zawsze będzie to DateTime.Min, która wynosi 0000-Jan-01. To jest poza zakresem SmallDateTime, ale znajduje się w zakresie DateTime2. Dlatego EF spróbuje przekazać typ SQL DateTime2 do serwera SQL. Ponieważ Twoja baza danych używa SmallDateTime, pojawi się błąd pokazany w Twoim pytaniu.

Aby rozwiązać ten problem, mam do wyboru następujące opcje:

  • uczynić pole nullalbe. (musisz zawsze sprawdzać, czy daty wprowadzenia mieszczą się w zakresie SmallDateTime.)

  • lub zmień typ daty na DateTime2 w serwerze SQL

  • lub zmusić EF do używania typu danych DateTime2 podczas tworzenia bazy danych. Kod będzie podobny do poniższego. (Ta metoda powinna znajdować się w twojej klasie kontekstu.)


  protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity()
            .Property(t => t.GameTime )
            .HasColumnType("datetime2");
    }
  • Napisz pomocnik konwertera, aby ustawić minimalną wartość właściwości DateTime tak, aby odpowiadała smalldatetime w Twojej aplikacji.

  • Napisz wyzwalacz w bazie danych, aby przekonwertować DateTime2 (z końca aplikacji, ale datetime2 z końca bazy danych) na smalldatetime.

Mam nadzieję, że dobrze zrozumiałem Twoje pytanie, a moja odpowiedź jest pomocna.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SSMS wersja 18 – brak diagramów bazy danych

  2. Dołącz wyniki z dwóch zapytań i wyprowadź jako pojedynczą tabelę

  3. Jak mogę ręcznie wstawić tożsamość?

  4. nie można połączyć się z komputerem nazwa\SQLEXPRESS

  5. Użyj XEvent Profiler do przechwytywania zapytań w SQL Server