Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Konversi tipe data datetime2 ke tipe data datetime kecil menghasilkan nilai di luar rentang.\r\nPernyataan telah dihentikan

Dari tampilan kesalahan, database Anda menggunakan SmallDateTime sebagai tipe tanggal. Nilai minimumnya adalah 1900-Jan-01. Dengan asumsi entitas Anda seperti di bawah ini

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

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

Nilai GameTime Anda tidak dapat dibatalkan, jadi ketika Anda tidak menetapkan nilai apa pun untuknya, itu akan selalu menjadi DateTime.Min yaitu 0000-Jan-01. Ini di luar jangkauan SmallDateTime, tetapi berada dalam kisaran DateTime2. Jadi EF akan mencoba meneruskan tipe SQL DateTime2 ke server SQL. Karena database Anda menggunakan SmallDateTime, Anda akan mendapatkan kesalahan yang ditampilkan dalam pertanyaan Anda.

Untuk mengatasi masalah ini, Anda memiliki opsi berikut yang dapat saya pikirkan:

  • membuat bidang nullalbe. (Anda harus selalu memeriksa apakah tanggal input Anda berada dalam rentang SmallDateTime.)

  • atau ubah jenis tanggal menjadi DateTime2 di SQL server

  • atau paksa EF untuk menggunakan tipe data DateTime2 saat membuat database. Kodenya akan seperti di bawah ini. (Metode ini harus berada di dalam kelas konteks Anda.)


  protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity()
            .Property(t => t.GameTime )
            .HasColumnType("datetime2");
    }
  • Tulis pembantu konverter untuk menyetel nilai minimum properti DateTime agar sesuai dengan waktu tanggal kecil di aplikasi Anda.

  • Tulis pemicu di database untuk mengonversi DateTime2 (dari akhir aplikasi, tetapi datetime2 di akhir database) ke smalldatetime.

Mudah-mudahan, saya telah memahami pertanyaan Anda dengan benar, dan jawaban saya membantu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cara memiliki loop while ganda di sql server 2008

  2. Hitung jam kerja antara dua tanggal

  3. Versi .Net framework apa yang dikirimkan bersama SQL Server 2008?

  4. Salin Database SQL Server Express ke Komputer Lain

  5. Pemfilteran SQL Server 2008