无法使用实体框架和mysql在vb.net中插入主 - 详细记录

时间:2016-12-28 10:23:07

标签: mysql .net vb.net entity-framework

我有一个代码在localdb SQL Server数据库上工作,使用Entity Framework 6和DataBase第一个方法。此代码的任务之一是将值插入主 - 详细信息表。现在我必须将解决方案迁移到MySQL中,并且我得到一个DbUpdateException,我知道这是由详细信息表引起的。

我有这个实体课程:

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

假设我有一个代码来插入类似于(简化)的master-detail:

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导致异常,但我没有看到该字段导致此异常。一些例外属性是:

  • 消息:“更新条目时发生错误。有关详细信息,请参阅InnerException。”
  • InnerException:指定的值不是有效常量类型的实例。

正如我所说,这适用于SQL Server(localdb),但不适用于MySQL。不幸的是,我无法识别GSPC_ResultadodDetalle的字段导致异常,但我怀疑GSPC_ResultadoDetalle无法从GSPC_Resultado获取ResultadoID值。

有什么建议吗?

谢谢你的建议,

费兰。

1 个答案:

答案 0 :(得分: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。我不知道这个问题是否与Entity Framework版本或Mysql Connector有关,或者......

干杯,

费兰。