Asp.net mvc MVC一对零插入不更新
我正在使用EntityFramework。我有一个“应用程序”对象(它有一个字段CertificateRasonId),可以有一个或零个CertificateRasons-因此与“CertificateRasons”表有关系,在edmx图表上,我们看不到CertificateRasonTypeId字段 当我更新应用程序时,它会插入一个新的CertificateReason并将Application.certificateReasonTypeID更新为新ID,而不是将Application.certificateReasonTypeID更新为所选ID CertificateReason对象处于添加状态(技术上正确)。 aspx代码是Asp.net mvc MVC一对零插入不更新,asp.net-mvc,entity-framework,insert-update,Asp.net Mvc,Entity Framework,Insert Update,我正在使用EntityFramework。我有一个“应用程序”对象(它有一个字段CertificateRasonId),可以有一个或零个CertificateRasons-因此与“CertificateRasons”表有关系,在edmx图表上,我们看不到CertificateRasonTypeId字段 当我更新应用程序时,它会插入一个新的CertificateReason并将Application.certificateReasonTypeID更新为新ID,而不是将Application.cer
<%foreach (var certReason in Model.CertificateReasons)
{ %>
<li>
<%= Html.RadioButton("CertificateReason.id", certReason.id)%>
<!-- only because it is adding when it shouldn't -we have to set the other non null values(i.e. not id) in the object else it will fail when it tries to save-->
<input type="hidden" value="<%= certReason.meaning %>" name="CertificateReason.meaning"/>
<input type="hidden" value="<%= certReason.effectiveFrom %>" name="CertificateReason.effectiveFrom"/>
<input type="hidden" value="<%= certReason.createdWhen %>" name="CertificateReason.createdWhen"/>
<label for="certificateReasonTypeID<%=certReason.meaning%>"><%=certReason.meaning%></label>
</li>
<%}%>
感谢答案是将应用程序模型传递到编辑帖子-必须在表单上放置一个隐藏字段以正确填充对象),并确保我得到的应用程序对象不是变量。无法使用ModelState.IsValid始终为false,但正确更新而不是插入。另一点是必须在get上做一个.Include(“认证原因”) 公共操作结果编辑(应用程序应用程序、FormCollection集合) {
Application movieToEdit = OMF.GetApplication(app.id);
if(app.CertificateReason != null)
movieToEdit.CertificateReason = OMF.CertificateReason.First(d => d.id == app.CertificateReason.id);
TryUpdateModel(movieToEdit);
//if (ModelState.IsValid) --can't use this
// {
OMF.SaveChanges();
// }
return RedirectToAction("Edit", app.id);
}
Application movieToEdit = OMF.GetApplication(app.id);
if(app.CertificateReason != null)
movieToEdit.CertificateReason = OMF.CertificateReason.First(d => d.id == app.CertificateReason.id);
TryUpdateModel(movieToEdit);
//if (ModelState.IsValid) --can't use this
// {
OMF.SaveChanges();
// }
return RedirectToAction("Edit", app.id);
}