sql >> Databáze >  >> RDS >> Sqlserver

Převod datového typu datetime2 na datový typ smalldatetime vedl k hodnotě mimo rozsah.\r\nPříkaz byl ukončen

Z pohledu chyby vaše databáze používá jako typ data SmallDateTime. Jeho minimální hodnota je 1900-Jan-01. Za předpokladu, že vaše entita je něco jako níže

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

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

Vaše hodnota GameTime nemá hodnotu null, takže když pro ni nenastavíte žádnou hodnotu, bude to vždy DateTime.Min, což je 0000-Jan-01. Toto je mimo rozsah SmallDateTime, ale je v rozsahu DateTime2. EF se tedy pokusí předat SQL serveru typ DateTime2 SQL. Protože vaše databáze používá SmallDateTime, zobrazí se ve vaší otázce chyba.

K vyřešení problému máte následující možnosti, které mě napadají:

  • udělejte pole nullalbe. (Vždy musíte zkontrolovat, zda jsou vaše vstupní data v rozsahu SmallDateTime.)

  • nebo změňte typ data na DateTime2 na serveru SQL

  • nebo vynutit EF, aby při vytváření databáze použil datový typ DateTime2. Kód bude vypadat jako něco níže. (Tato metoda by měla být součástí vaší kontextové třídy.)


  protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity()
            .Property(t => t.GameTime )
            .HasColumnType("datetime2");
    }
  • Napište pomocníka převodníku, který nastaví minimální hodnotu vaší vlastnosti DateTime tak, aby odpovídala smalldatetime ve vaší aplikaci.

  • Napište spouštěč do databáze pro převod DateTime2 (z konce aplikace, ale datetime2 na konci databáze) na smalldatetime.

Doufám, že jsem správně pochopil vaši otázku a moje odpověď vám pomůže.




  1. optimizer_search_depth v Google Cloud SQL

  2. SQL Server vypočítaný sloupec vyberte z jiné tabulky

  3. Chyba nesprávného řetězce při přidávání emotikonů do databáze prostřednictvím formuláře

  4. Jak vytvořím uživatele se stejnými oprávněními jako root v MySQL/MariaDB?