我有一个代码在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