私はEntityFrameworkを使用しています。1 つまたはゼロの CertificateReasons を持つことができる "Application" オブジェクト (フィールド certificateReasonID を持つ) があります。そのため、"CertificateReason" テーブルとの関係があり、edmx ダイアグラムでは、certificateReasonTypeID フィールドが表示されません。
アプリケーションを更新すると、Application.certificateReasonTypeIDを選択したIDに更新する代わりに、新しいCertificateReasonを挿入し、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>
<%}%>
アップデートコードは
public ActionResult Edit(int id, FormCollection collection, ApplicationViewModel model)
{
var appToUpdate = OMF.Application.First(m => m.id == id);
UpdateModel(movieToUpdate, collection.ToValueProvider());
if (ModelState.IsValid)
{
OMF.ApplyPropertyChanges(movieToUpdate.EntityKey.EntitySetName, appToUpdate );
OMF.SaveChanges();
}
}
ありがとう