2012-02-10 12 views
4

マイコードファーストモデルのプロパティはSystem.DateTimeです。コードを播種データベースが起動されると、それはこの例外をスロー:EF 4.1、CodeFirst C#DateTime datetime2とdatetimeの非互換性の対応方法

SqlExceptionが(0x80131904):datetimeデータ型にDATETIME2データ型の変換は、範囲外の値をもたらしました。

私は、コンストラクタで新しいDateTimeオブジェクトを作成しています。コードまず、データベーススキーマを作成しています。 Code Firstのこの明らかなバグをどのように克服するのですか?私は私のデータ型に特に関心がありません。私は単に日付を格納する必要があり、オプションで時刻を記録する必要がありますが、重要ではありません。

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

答えて

3

SQL Serverの.NETからdatetimeへのDateTimeのEFマップ。タイプは異なる範囲を持っています:datetimeは、1750年頃より後の日付しか格納できません。DateTimeをより早い日付のエンティティに格納しようとすると、DateTime(これは1年目です)これを保存することはできません。

ソリューション:

  • のどちらかは、あなたが保存したい日付があることを確認して、後に1750
  • それとも、あなたに広い範囲を持っている、SQL Serverのexplitely datetime2DateTimeプロパティをマップより。流暢APIでこのマッピングを定義する方法の例は:それは.NETでDateTimeに良く合うのでhttps://stackoverflow.com/a/8044310/270591

実は私もdatetime2にデフォルトのマッピングを予想していました。しかし何らかの理由で彼らはデフォルトとしてdatetimeを使うことに決めました。

+0

ありがとう、私の解答をご覧ください。 – UniqueMan

+0

流暢なAPIの代わりにコードアノテーションを使用できますか? – billy

+0

@billy:注釈を使用して 'datetime2'型を定義することができます:' [Column(TypeName = "datetime2")] '。精度を明示的に定義する属性はありません。しかし、あなたは試行することができます(精度0の例): '[Column(TypeName =" datetime2(0) ")]'。それがうまくいくかどうかはわかりません。 – Slauma

0

申し訳ありません。私は、DateTimeの値を指定していないデータエンティティの初期化からエラーが発生していることを、より慎重にデバッグした後に分かりました。

私はそれが新しいDateTime(2012, 2, 19, 19, 0, 0)またはそのようなものを含む長いデータシーディングステートメントから来ていると思っていました。彼の努力のためにスラマのおかげで - 彼は単位化された価値に起因するということは間違いありませんでした。

関連する問題