0

私はこのクラスを持っています:

Public Class Customer
      Public Property CustomerID As Integer
      Public Property CustomerName As String
      Public Property OrdersList As ICollection(Of Order)
End Class

Public Class Order
          Public Property OrderID As Integer
          Public Property CustomerID As Integer
          Public Property OrderTotal As Decimal
          Public Property OrderDetails As ICollection(Of OrderDetail)
          Public Property OrderCustomer As Customer
End Class

Public Class OrderDetail

    Public Property OrderDetailID As Integer
    Public Property OrderID As Integer
    Public Property ProductID As Integer
    Public Property Price As Decimal
    Public Property Quantity As Decimal
    Public Property LineTotal As Decimal

    Public Property OrderDetailOrder As Order
    Public Property OrderDetailProduct As Product

End Class

Public Class Product
    Public Property ProductID As Integer
    Public Property ProductName As String
    Public Property ProductPrice As Decimal
    Public Property OrderDetails As ICollection(Of OrderDetail)
End Class

これがPUTメソッドです

Function PutOrder(ByVal id As Integer, ByVal order As Order) As HttpResponseMessage
        If ModelState.IsValid And id = order.OrderID Then
            db.Entry(order).State = EntityState.Modified
            Try
                db.SaveChanges()
            Catch ex As DbUpdateConcurrencyException
                 Return Request.CreateResponse(HttpStatusCode.NotFound)
            End Try
            Return Request.CreateResponse(HttpStatusCode.OK)
        Else
            Return Request.CreateResponse(HttpStatusCode.BadRequest)
        End If
End Function

しかし、実行すると:db.Entry(order).State=EntityState.Modified このエラーが発生します

参照整合性制約違反が発生しました:参照制約を定義するプロパティ値が、関係のプリンシパルオブジェクトと依存オブジェクトの間で一貫していません。

みんなありがとう

4

2 に答える 2

0

これが解決策だと思います

    Dim x = db.Orders.Include(Function(a) a.OrderDetails).Include(Function(o) o.OrderCustomer).FirstOrDefault
    db.Entry(x).CurrentValues.SetValues(order)

ありがとう@Slauma、あなたのヒントは役に立ちます

于 2013-02-18T17:14:28.347 に答える
0

だということだ

  • またorder.CustomerID != order.OrderCustomer.CustomerID
  • またはOrderDetail.OrderID != OrderDetail.OrderDetailOrder.OrderID少なくとも1つのOrderDetails
  • またはOrderDetail.ProductID != OrderDetail.OrderDetailProduct.ProductID少なくとも1つのOrderDetails

orderをコンテキストにアタッチする前に、これらの値が等しいことを確認する必要があります。

于 2013-02-17T16:55:01.313 に答える