2013-02-17 55 views
0

我有這個類:參照完整性約束違規發生mvc4

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(順序).STATE = EntityState .Modified 我有這個錯誤

參照完整性約束衝突發生了:屬性值定義關係中的主體和相關對象之間的參照約束不一致。

感謝ü所有

回答

0

這意味着

  • 要麼order.CustomerID != order.OrderCustomer.CustomerID
  • OrderDetail.OrderID != OrderDetail.OrderDetailOrder.OrderID用於爲訂單明細中至少一個的訂單明細的至少一個
  • OrderDetail.ProductID != OrderDetail.OrderDetailProduct.ProductID

您必須確保那些在將order附加到上下文之前,值是相等的。

+0

總是我的訂單沒有配備像那些屬性:order.OrderCustomer =沒什麼,OrderDetail.OrderDetailProduct =沒有什麼是正確的? – Senator 2013-02-17 17:02:55

+0

@Senator:集合怎麼樣,比如'order.OrderDetails'?如果此集合中的'OrderDetails'沒有設置正確的'OrderID',那麼您可能也會得到這個異常,但我不確定。 – Slauma 2013-02-17 17:12:09

+0

我嘗試這樣:'對於每個objOrderDetails在order.OrderDetails objOrderDetails.OrderID = order.OrderID 接着 db.Entry(順序).STATE = EntityState.Modified'但我有此錯誤:**與一個對象ObjectStateManager中已存在相同的密鑰。 ObjectStateManager無法使用相同的密鑰跟蹤多個對象**,抱歉格式不對 – Senator 2013-02-17 17:21:04

0

我認爲這是解決

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

感謝ü@Slauma,你的祕訣是有益

相關問題