我有一個代碼在localdb SQL Server數據庫上工作,使用Entity Framework 6和DataBase第一個問題。此代碼的其中一項任務是將值插入主細節表中。現在我必須將解決方案遷移到MySQL中,並且我得到一個DbUpdateException,我知道這是由細節表引起的。無法在vb.net中使用實體框架和mysql插入master-detail記錄
我有了這個實體類:
Partial Public Class GSPC_Resultado
Public Property ResultadoID As Long
Public Property Fecha As Date
Public Property ConfiguracionID As Long
Public Overridable Property GSPC_Configuracion As GSPC_Configuracion
Public Overridable Property GSPC_ResultadoDetalle As ICollection(Of GSPC_ResultadoDetalle) = New HashSet(Of GSPC_ResultadoDetalle)
End Class
Partial Public Class GSPC_ResultadoDetalle
Public Property ResultadoDetalleID As Long
Public Property ResultadoID As Long
Public Property RutaID As Long
Public Property NombreArchivo As String
Public Property AccionCompletada As Nullable(Of SByte)
Public Overridable Property GSPC_Resultado As GSPC_Resultado
Public Overridable Property GSPC_ResultadoRuta As GSPC_ResultadoRuta
End Class
比方說,我有一個代碼中插入主詳細那樣(簡體):
Dim resultado As New GSPC_Resultado
resultado.ConfiguracionID = 1
resultado.Fecha = DateTime.Now
Dim resultadoDetalle As New GSPC_ResultadoDetalle
resultadoDetalle.RutaID = 1
resultadoDetalle.NombreArchivo = "myname"
resultadoDetalle.AccionCompletada = True
resultado.GSPC_ResultadoDetalle.Add(resultadoDetalle)
context.GSPC_ResultadoSet.Add(resultado)
context.SaveChanges()
試圖捕獲異常發現問題:
Try
context.SaveChanges()
Catch ex As DbUpdateException
For Each entry As DbEntityEntry In ex.Entries
Console.WriteLine("Type {0} ", entry.Entity.GetType().Name)
Next
End Try
有了這個,我知道,實體GSPC_ResultadoDetalle是造成exceptyion ,但我沒有看到這個字段導致這個異常。一些例外屬性如下:
- 消息:「更新條目時發生錯誤,請參閱InnerException獲取詳細信息。
- InnerException:指定的值不是有效常量類型的實例。
正如我所說,這工作在SQL Server(localdb)上,但不在MySQL上。不幸的是,我無法識別GSPC_ResultadodDetalle字段導致異常,但我懷疑GSPC_ResultadoDetalle無法從GSPC_Resultado中獲取ResultadoID值。
有什麼建議嗎?
感謝您的建議,
Ferran。
添加堆棧跟蹤異常 –
似乎與AccionCompletada字段有關,它是數據庫上的tinyint(1)字段,在實體框架上被視爲Sbyte(bool)。然而,嘗試在http://stackoverflow.com/questions/23731963/ado-entity-treat-tiny-as-boolean-false上建議的解決方案不適合我。 – Ferran