2009-11-05 62 views
22

既存のデータベースを編集してpaticularフィールドを更新するASP.NET MVCアプリケーションがあります。DateTime私のデータベースは4つのフィールドを持ち、そのうちの2つはDateCreatedDateModifiedです。私は、フィールドを更新しようとすると、私は同じそれが作成された日付を更新する、理由をDateCreated時間を維持しないようにしたい、と私はここでDateTime.Nowdatetime2データ型からdatetimeデータ型への変換で範囲外の値が発生しました

を使用して現在の時刻にDateModified時間を変更与えられたコードですちょうどケースで私は何か間違っている。これはASP.NET MVCを初めて使用したので、やさしくなっています。 Contextが呼び出されたときに私は他の答えを見たことがありますが、それに対する参照は見つかりません。アプリケーションを実行すると、タイトルにエラーメッセージが表示され、contractEntity.SaveChanges()は赤色になります。

public ActionResult Edit(Contract editContract) { 
var contract = (from c in contractEntity.Contracts where c.Id == editContract.Id select c).First(); 
if (!ModelState.IsValid) 
    return View(contract); 
// editContract.DateCreated = contract.DateCreated; 
// editContract.DateModified = DateTime.Now; 
    contractEntity.ApplyCurrentValues(contract.EntityKey.EntitySetName, editContract); 
    contractEntity.SaveChanges(); 
    return RedirectToAction("Index"); 
} 

ご了承ください。ありがとう。

+0

私はこの投稿が書かれて以来、edmxを手動で修正するのは答えではないと思います。 2011年に掲載されたものはJamiegsのより有望な候補です。 – OmegaMan

答えて

19

this websiteを読んだ後、私は自分のデータベースと変更の.edmxファイルを開くことが見つかりました

<...Provider="System.Data.SqlClient" ProviderManifestToken="2005".../> 

<...Provider="System.Data.SqlClient" ProviderManifestToken="2008".../> 

は、この受け入れられるか、そのエラーを修正するより良い方法はありますか?

+0

どのウェブサイトですか? –

+0

http://ifunky.net/post/Type-datetime2-is-not-a-defined-system-type-Entity-Framework.aspx 私が投稿した場合は、助けになりました。 –

+5

この変更により、EFがDATETIME2タイプをまったく使用しなくなります。それはあなたのアプリに適したソリューションですか?あなただけがそれを言うことができます。 DATETIME2を使用する予定の場合は、それを考慮して計画してください。 –

38

私には同じ問題がありましたが、問題はデフォルトでモデルを保存したときに無効なDateTimeが作成されていたことでした。私はフィールドCreatedOnを持っていて何も設定していないので、SQLの無効なDateTimeであった01/01/0001の値を意味していました。それを設定すると、私にとって問題がなくなりました。

+2

私はなぜまだEF 4だろうと思います。3 Code-Firstは、datetime2の代わりにSQL Server 2008 R2データベースのdatetimeフィールドを作成します。 – IsmailS

12

また、モデル(.edmxのEF)を編集し、問題のフィールドのStoreGeneratedPatternをComputedに設定することもできます。 SQLサーバーによって計算されるため、そのフィールドには保存されません。

+0

この場合、この方法が最適です。データベースにデフォルトを指定している場合は、* only *が機能することに注意してください。質問はDateCreatedとDateModifiedに関するものなので、これらはおそらく 'DEFAULT GETDATE()'として設定されるでしょう。 – CrazyPyro

6

私は同じエラーがあり、DateTime Nullableフィールドを持つSQL 2008 DBをお持ちの場合、コードのフィールドにNull(Nothing)を明示的に割り当てないでください。このエラーが発生するか、すべてのDateTimeフィールドをDateTime2に変更できます。

3

このようなDateTimeをnullにすることはできますか?データベース内のカラムがnull可能である場合は、ドメインエンティティプロパティに追加します。これはそれを動作させるでしょう。

関連する問題