クイック背景: 編集HttpPostアクションを作成しようとしています。各プロパティでConsole.Writeを使用した後にEntityValidationErrorsが消える
public async Task<ActionResult> Edit (myViewModel model){
if(ModelState.IsValid){
myObject x = await db.myObjects.FindAsync(model.Id);
db.Entry(x).State = EntityState.Modified;
// code to map model to x
await db.SaveChangesAsync();
//...
SaveChangesAsyncは()行は、エラーを与える:「検証は、1つのまたは複数のエンティティのために失敗した詳細については、 『EntityValidationErrors』プロパティを参照してください今すぐ
奇妙な部分:。。 私が追加しますそのようなXのすべてのプロパティのための等
Console.Write(x.property1);
Console.Write(x.property2.name);
、次いでXにモデルからのマッピングを行うとSaveChangesメソッドなどの線、エラーが発生しないとコードbeha私が期待しているようにヴェス。
ご協力お願いいたします。
EDIT:EntityValidationErrorsは、x.prop1とx.prop2が必要であると言います。私が発見したもう一つの修正点:x.prop1 = x.prop1; before db.SaveChangesAsync(); 気分は変わっても機能しています。
EDIT 2:詳細に私のコード:
public class myObject{
public int Id {get; set;}
[Required]
public virtual y prop1 {get; set;}
[Required]
public virtual z prop2 {get; set;}
[Required]
public string prop3 {get; set;}
[Required]
public string prop4 {get; set;}
}
そして、ここでは、マッピングコードです:注意すべき
if(ModeState.IsValid){
myObject x = await db.myObjects.FindAsync(model.Id);
db.Entry(x).State = EntityState.Modified;
x.prop3 = model.editedValueForProp3;
db.myObjects.AddOrUpdate(x);
await db.SaveChangesAsync();
return RedirectToAction("Index");
}
物事:私だけPROP1とPROP2のための検証エラーを取得仮想プロパティです。これらの行を前に書くと、エラーが消えます。db.SaveChangesAsync()
x.prop1 = x.prop1;
x.prop2 = x.prop2;
私は遅延読み込みを使用しています。それが問題だろうか?
「EntityValidationErrors」は何が返されましたか?そして、検証エラーが消える前に2つの 'Console.Write'行をどこに置いたのですか? –
これが役立つかどうか確認してください。https://stackoverflow.com/questions/29231445/a-first-chance-exception-of-type-system-data-entity-validation-dbentityvalidati/29231832#29231832 –
@ TetsuyaYamamotoありがとうコメント。 EntityValidationErrorsは、xのいくつかのプロパティが必要であると言います。しかし、私はDebug.WriteLine(x.prop1.Id)正しい値を表示します。変更を保存するときにx.prop1に値がないと思うのはなぜですか? Console.Write行は、モデルをxにマップするコードの直前に配置されました。 –