4

私のCodeFirstモデルにはSystem.DateTimeプロパティがあります。データベースシードコードが呼び出されると、次の例外がスローされます。

SqlException(0x80131904):datetime2データ型をdatetimeデータ型に変換すると、値が範囲外になりました。

コンストラクターを使用して新しいDateTimeオブジェクトを作成しています。コードファーストはデータベーススキーマの作成です。コードファーストでこの明らかなバグを克服するにはどうすればよいですか?私は自分のデータ型にこだわっていません。日付と、オプションで時刻を保存するだけで済みますが、重要ではありません。

私はたくさんの投稿を検索して読みましたが、このエラーが発生したものは、CodeFirstで生成されたデータスキームからのものであることを示していません。私が見つけた最も近い答えProviderManifestTokenは、edmxファイル内のを変更することでしたが、私のプロジェクトにはファイルがありませんedmx。私はデザイナーを使用しませんでした。コードファーストを使用しています。

4

2 に答える 2

3

EFDateTimeは .NETdatetimeで SQL Server にマップされます。型には異なる範囲があります: datetime1750 年頃より後の日付のみを格納できDateTimeます。以前の日付または単位化されたDateTime(1 年を持つ) エンティティに を格納しようとすると、SQL Server がこれを格納できないため、例外が発生します。 .

解決:

  • 保存する日付が 1750 年以降であることを確認してください
  • または、より広い範囲を持つ SQL Server にDateTimeプロパティを明示的にマップします。datetime2Fluent API でこのマッピングを定義する方法の例: https://stackoverflow.com/a/8044310/270591

実際には、.NETdatetime2により適しているため、デフォルトのマッピングも期待していました。DateTimeしかし、何らかの理由でdatetime、デフォルトとして使用することにしました。

于 2012-02-10T16:07:09.287 に答える
0

申し訳ありませんが、より慎重にデバッグした後、DateTime.

DateTime(2012, 2, 19, 19, 0, 0)私はそれが、新しいものなどを含む長いデータ シード ステートメントから来ていると思っていました。Slauma の努力に感謝します - 彼は、それが統一された値によるものであったことは正しかったです。

于 2012-02-11T00:02:08.733 に答える