我有一种情况,在实体框架中调用 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