SqlException:datetime2データ型をdatetimeデータ型に変換すると、値が範囲外になりました。
私のコードは次のようなものです:
using (var contxt = new realtydbEntities())
{
var status = GetStatus();
var repIssue = new RepairIssue()
{
CreaterId = AuthorId,
RepairItemDesc = this.txtDescription.Text,
CreateDate = DateTime.Now,//here's the problem
RepairIssueStatu = status
};
contxt.AddObject("RepairIssues", repIssue);
contxt.SaveChanges();
}
CreateDateタイプがsmalldatetimeである列へのプロパティマッピング。
このコードを実行する方法は?
問題の根本は、C#のDateTimeオブジェクトがSQLのsmalldatetimeタイプよりも「大きい」ことです。違いの概要は次のとおりです。 http://karaszi.com/the-ultimate-guide-to-the-datetime-datatypes
だから本当にあなたのオプションは次のとおりです。
同じ例外がありましたが、最小の日時値を取得するのはnull許容でない日時プロパティでした。これはDBでの小さな日時ではありませんでしたが、C#の最小日時がSQLの最小日時の制限を超えています。解決策は明白でした。日時を適切に設定してください。ところで、コードは私のものではなかったので、私はそのプロパティに気づいていませんでした:)
これをモデルクラスに追加します。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Properties<DateTime>().Configure(c => c.HasColumnType("datetime2"));
}
SqlDateTime は、必要なことを実行できるようにします。
移行内容を確認してください。このようにモデルを変更しました」
public DateTime? CreationDate {get;セットする; }
次に、新しい移行を追加し、最後にデータベースの更新を実行します
古いデータを削除せずにSQLテーブルとアプリケーションに日時列を追加したため、このエラーが発生しました。新しいレコードを更新できることがわかりました。ただし、フィールドが追加される前にテーブルにあったレコードの1つで更新が試行されたときに、このエラーがスローされました。