0

ページでエラーが発生した場合に後で使用できるように、レコードを取得して保存しようとしています。

このコードは、作成/編集で使用されます。ビュー モデルから値を取得し、db エンティティにマッピングしています。

Dim objExistingSupplier As SUPPLIER = db.SUPPLIER.Single(Function(e) e.SUPPLIER_ID = Supplier.SUPPLIER_ID)
objPermStaffAction = objExistingSupplier
objSupplier = Mapper.Map(Of SupplierViewModel, SUPPLIER)(Supplier, objExistingSupplier)

私が理解していることから、.Single は評価を強制する必要があります。ただし、マッピングが発生すると、objPermStaffAction オブジェクトのプロパティが失われるか変更されます。誰かが私が間違っていることを説明できますか?

関数全体は次のとおりです。

    Private Function SaveSupplier(Supplier As SupplierViewModel) As ActionResult
        Dim objSupplier, objPermStaffAction As SUPPLIER
        If Supplier.SUPPLIER_ID = 0 Then
            objSupplier = Mapper.Map(Of SupplierViewModel, SUPPLIER)(Supplier)
        Else
            Dim objExistingSupplier As SUPPLIER = db.SUPPLIER.Single(Function(e) e.SUPPLIER_ID = Supplier.SUPPLIER_ID)
            objPermStaffAction = objExistingSupplier
            objSupplier = Mapper.Map(Of SupplierViewModel, SUPPLIER)(Supplier, objExistingSupplier)
        End If

        If ModelState.IsValid Then
            If Supplier.SUPPLIER_ID = 0 Then
                objSupplier.CREATED_BY = Session("AppUserID")
                db.SUPPLIER.Add(objSupplier)
            Else
                objSupplier.UPDATED_BY = Session("AppUserID")
                UpdateModel(objSupplier)
            End If

            Try
                db.SaveChanges()
                Return RedirectToAction("Index")
            Catch ex As Exception
                If InStr(ex.InnerException.InnerException.Message, "PRSNL.SUPPLIER_UK") > 0 Then
                    ModelState.AddModelError("SUPPLIER_CODE", "Supplier Code already exists. Please choose another.")
                End If
            End Try

        End If

        'This will run if an error occured
        If Supplier.SUPPLIER_ID > 0 Then
            Supplier = Mapper.Map(Of SupplierViewModel)(objPermStaffAction)
        End If
        ViewBag.YNList = Common.GetYNList
        Return View(Supplier)
    End Function
4

1 に答える 1

0

SupplierViewModel は参照型です。したがって、objPermStaffAction は、マッピング後に更新される同じオブジェクトを参照します。

元の (マップされていない) オブジェクトが必要なのはなぜですか?

于 2012-08-02T02:06:14.190 に答える