2016-12-28 41 views
0

我有一個代碼在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。

+0

添加堆棧跟蹤異常 –

+0

似乎與AccionCompletada字段有關,它是數據庫上的tinyint(1)字段,在實體框架上被視爲Sbyte(bool)。然而,嘗試在http://stackoverflow.com/questions/23731963/ado-entity-treat-tiny-as-boolean-false上建議的解決方案不適合我。 – Ferran

回答

0

好吧,最後我必須更改我的代碼,強制實體框架在向主表添加信息後保存更改,然後添加詳細信息並最終再次保存更改。

Dim resultado As New GSPC_Resultado 
resultado.ConfiguracionID = 1 
resultado.Fecha = DateTime.Now 
context.GSPC_ResultadoSet.Add(resultado) 
context.SaveChanges() 

Dim resultadoDetalle As New GSPC_ResultadoDetalle 
resultadoDetalle.RutaID = 1 
resultadoDetalle.NombreArchivo = "myname" 
resultadoDetalle.AccionCompletada = True 
resultadoDetalle.GSPC_Resultado = resultado 

context.GSPC_ResultadoDetalleSet.Add(resultadoDetalle) 
context.SaveChanges() 

我必須指出,當我從SQL Server遷移到MySQL我已經從EF6更改爲EF5。我不知道這個問題涉及到實體框架的版本,或MySQL連接器,或者......

乾杯,

費蘭。

相關問題