私は日付ピッカーを含むアプリケーションで作業していますが、そのピッカーで時間を非常に古い値に設定した場合、またはこの値をデータベースに保存しようとしたときにサーバーがこの例外をスローした場合、その原因は何ですか?
Datetime2データ型からdatetimeデータ型への変換の結果、範囲外の値が生じました。ステートメントは終了されました。
DateTime
の範囲は、1753年1月1日から9999年12月31日までです。
DateTime2
の範囲は、0001-01-01〜9999-12-31です
したがって、1753年より前の日付を入力している場合、テーブルのフィールドがDateTime
型であるときにこのエラーが発生します。
Entity Frameworkは、値{01/01/0001 00:00:00}のフィールドにデフォルトの日付を追加しますが、これはSQLの日付生成の範囲外です。したがって、それを機能させるには、EFにデフォルトの日付を生成しないように要求する必要があります。そのクラスのモデルで次の操作を行うことで、NULLを許可することができます。
この場合、EntityFrameworkによってLastLoggedInフィールドのデフォルト値が生成されます。日付ベースのこのフィールドがnull値をとることができる場合、モデルで次の操作を行うことでnull値を許可できることを意味します。
[Display(Name = "LastLoggedIn")]
public DateTime? LastLoggedIn { get; set; }
Products prd = new Products();
prd.CreatedDate = DateTime.Now;
上記のように追加できます
このエラーは、コントローラーアクションのバインドリスト内のフィールド名のスペルが間違っている場合にも発生する可能性があります。私の状況では、日付フィールドは思ったようにバインドされていなかったため、日付はデフォルトで範囲外の日付になりました。