实体框架SaveChanges丢弃值

时间:2013-10-03 16:13:46

标签: vb.net asp.net-mvc-4 oracle11g entity-framework-5

我有一种情况,我在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

1 个答案:

答案 0 :(得分:0)

您可以发布控制器代码吗?

看起来您的实体未被跟踪(正确)。在调试模式下,yourcontext.Entry(yourentity).State?

的值是多少

检查以确保您没有将EEO_COMPLAINT_TYPE_ID设置器设置为内部。不要这样做:int EEO_COMPLAINT_TYPE_ID {get;内部集;}

它应该是:int EEO_COMPLAINT_TYPE_ID {get;设置;}