0

Entity Framework で SaveChanges を呼び出すと、ドロップダウン値が失われる状況があります。保存する前にドロップダウンの値を変更した場合、値は保持されます。値を変更しないと、SaveChanges の後で Nothing に変換されます。これはアプリ全体では発生しませんが、別のコントローラーの隠しフィールドと日付フィールドで発生します。

デバッグ中に、SaveChanges が呼び出されるまでドロップダウンの値が存在することがわかります。そのため、その後ドロップダウンがなくなった理由に完全に困惑しています。

他のコードを含めるのに役立つ場合は、お知らせください。

編集:指摘するために、私はOracle 11g、MVC 4、Entity Framework 5を使用しています.

SaveChanges を呼び出す Save メソッドを次に示します。

  Private Function Save(EEOComplaint As EEOComplaintViewModel) As ActionResult
        Dim objEEOComplaint As STAFF_ACTION

        If EEOComplaint.STAFF_ACTION_ID = 0 Then
            objEEOComplaint = Mapper.Map(Of EEOComplaintViewModel, STAFF_ACTION)(EEOComplaint)
        Else
            Dim objExistingSeparation As STAFF_ACTION = db.STAFF_ACTION.Find(EEOComplaint.STAFF_ACTION_ID)
            objEEOComplaint = Mapper.Map(Of EEOComplaintViewModel, STAFF_ACTION)(EEOComplaint, objExistingSeparation)
        End If

        ValidateForm(ModelState, objEEOComplaint)

        If ModelState.IsValid Then

            'setting these to Nothing because the mapper is setting
            'them to "VPM.EEOComplaintViewModel" for some reason
            If objEEOComplaint.POSITN_ACTN_TYPE = "VPM.EEOComplaintViewModel" Then objEEOComplaint.POSITN_ACTN_TYPE = Nothing
            If objEEOComplaint.HIRG_REQST_APPRVL_TYPE = "VPM.EEOComplaintViewModel" Then objEEOComplaint.HIRG_REQST_APPRVL_TYPE = Nothing
            If objEEOComplaint.RECRTMNT_TYPE = "VPM.EEOComplaintViewModel" Then objEEOComplaint.RECRTMNT_TYPE = Nothing
            If objEEOComplaint.AWARD_TYPE = "VPM.EEOComplaintViewModel" Then objEEOComplaint.AWARD_TYPE = Nothing

            If EEOComplaint.ARCHIVE_IND = "Y" Then objEEOComplaint.END_DT = Now.ToShortDateString

            If EEOComplaint.STAFF_ACTION_ID = 0 Then
                objEEOComplaint.CREATED_BY = Session("AppUserID")
                db.STAFF_ACTION.Add(objEEOComplaint)
            Else
                objEEOComplaint.UPDATED_BY = Session("AppUserID")
                UpdateModel(objEEOComplaint)
            End If

            db.SaveChanges()

            Return RedirectToAction("Index")
        End If

        EEOComplaint = Mapper.Map(Of STAFF_ACTION, EEOComplaintViewModel)(objEEOComplaint)
        EEOComplaint = GetViewModel(EEOComplaint)
        If EEOComplaint.STAFF_ACTION_ID = 0 Then EEOComplaint.ARCHIVE_IND = "N"
        GetDropdownData(EEOComplaint)
        Return View(EEOComplaint)
    End Function
4

1 に答える 1

0

コントローラーのコードを投稿できますか?

あなたのエンティティは(正しく)追跡されていないようです。デバッグ モードでは、yourcontext.Entry(yourentity).State の値は何ですか?

EEO_COMPLAINT_TYPE_ID セッターを internal に設定していないことを確認してください。次のようにしないでください: int EEO_COMPLAINT_TYPE_ID {get; 内部セット;}

次のようにする必要があります: int EEO_COMPLAINT_TYPE_ID {get; 設定;}

于 2013-10-04T05:18:56.303 に答える