快速背景: 我正在嘗試編寫Edit HttpPost Action。EntityValidationErrors在每個屬性上使用Console.Write後消失
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()行給出了一個錯誤:「驗證失敗的一個或多個實體參見‘EntityValidationErrors’屬性更多細節
現在怪異的一部分:。 當我添加線,如
Console.Write(x.property1);
Console.Write(x.property2.name);
等對於x的所有屬性,然後執行映射從模型到X,然後調用SaveChanges,不會發生錯誤和碼BEHA正如我所期望的那樣。
請幫忙,謝謝。
編輯:EntityValidationErrors說x.prop1和x.prop2是必需的。我發現的另一個修復:寫x.prop1 = x.prop1;在db.SaveChangesAsync()之前; 感覺很奇怪,但它工作。
編輯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。 –