Asp.net mvc MVC一对零插入不更新

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

我正在使用EntityFramework。我有一个“应用程序”对象(它有一个字段CertificateRasonId),可以有一个或零个CertificateRasons-因此与“CertificateRasons”表有关系,在edmx图表上,我们看不到CertificateRasonTypeId字段

当我更新应用程序时,它会插入一个新的CertificateReason并将Application.certificateReasonTypeID更新为新ID,而不是将Application.certificateReasonTypeID更新为所选ID

CertificateReason对象处于添加状态(技术上正确)。 aspx代码是

<%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);

    }