2012-02-06 5 views
0

私はEntity Framework 4.1とMVC3を使用しています。モデルのプロパティを更新するためのフォームがあります。プロパティには検証のための属性があります。検証は正常に動作し、アクションの実行時には、ModelStateに検証エラーに関するすべての情報が含まれます。ModelStateが無効な場合にデータベースのオブジェクト値を更新する方法

通常、エラーがある場合、データは保存されず、検証情報を含むフォームがユーザーに再表示されます。

私がしたいのは、有効なプロパティを保存して無効なものを残しておきたいことです。クライアント側の検証が機能し、無効なフィールドが赤色になるので、次の要求で変更および保存することができます。

どうすれば実現できますか?過去に誰かが似たようなことをしたことはありますか?

+0

"無効なものを残している"とはどういう意味ですか?無効なプロパティのデータベースではどういうことが予想されますか?対応する列をnullに設定しますか?または、以前の値を使用します(エンティティがデータベースにすでに存在する場合)。ユーザーがエラーを修正せず、部分的に塗りつぶされた行のみが残っていればOKですか? – Pawel

+0

有効な状態のプロパティのみを更新したいと思います。無効なものを更新しないようにしたいので(現在のデータベース値は変更されません)ユーザーがエラーを修正しない場合は問題ありません。 –

答えて

0

検証(DbContext.Configuration.ValidateOnSaveEnabled)を無効にし、DbContext.SaveChanges()をオーバーライドする必要があると思います。オーバーライドされたメソッドでは、無効なエンティティのリストを返すDbContext.GetValidationErrors()を呼び出します。その後、私はコンテキストからこれらのエントリーを切り離し、base.SaveChanges()を呼び出します。 SaveChangesの呼び出しが完了したら、無効なエンティティを再接続します。

関連する問題