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.