2017-05-13 2 views
0

まず、EF6コードでMVC5を使用しています。私はsmalldatetime型の両方のタブ(KommunicationとItemannounce)のDate(Datum)カラムを持つテーブルを持っていて、System.DateTime.Nowで日付を設定しようとすると、次のエラーが表示されます。datetime2データ型からsmalldatetimeへの変換EF6 MVC5

The conversion of a datetime2 data type to a smalldatetime data type resulted in an out-of-range value.The statement has been terminated.

私はバイトのサイズを認識していて、私の状況で、次の解決策を試みた:私はまだ同じエラーを取得し

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
     var annons = modelBuilder.Entity<Itemannounce> (); 
     annons.Property (f => f.Datum).HasColumnType ("smalldatetime"); 
     var komm = modelBuilder.Entity<Kommunication> (); 
     komm.Property (f => f.Date).HasColumnType ("smalldatetime"); 
     base.OnModelCreating (modelBuilder); 
     } 

を。私はカラムをNOT NULLに設定しようとしました。私は本当にこれから道を見つけることなく数日間で立ち往生しています。誰も私が試していない解決策がありますか?

答えて

0

smalldatetimeのための最小値である1900-01-01

DATETIME2の最小値はおそらく0000-01-01

で、何ここで起こっていることは、我々がsmalldatetime型の列にDATETIME2値を渡しているということです。 datetime2が指定されておらず、NON NULLの場合、デフォルト値は0000-01-01です。これはsmalldatetimeの床のかなり下にあります。それは限界です。 smalldatetimeの範囲外の値を挿入すると、受信しているエラーメッセージが表示されます。

The conversion of a datetime2 data type to a smalldatetime data type resulted in an out-of-range value.The statement has been terminated.

これを解決する方法はたくさんあります。私はdatetime2を使用するモデルを更新することをお勧めします。

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
     var annons = modelBuilder.Entity<Itemannounce> (); 
     annons.Property (f => f.Datum).HasColumnType ("datetime2"); 
     var komm = modelBuilder.Entity<Kommunication> (); 
     komm.Property (f => f.Date).HasColumnType ("datetime2"); 
     base.OnModelCreating (modelBuilder); 
     } 

モデルを変更しない場合は、NULLチェックも機能します。 This similar questionにはいくつかのアイデアがあります。

+0

私は試してみました。 – Esmael

関連する問題