无法使用实体框架和MySQL在vb.net中插入主从记录

问题描述 投票:0回答:1

我有一个代码在 localdb SQL Server 数据库上工作,使用实体框架 6 和数据库优先方法。此代码的任务之一是将值插入主从表中。现在我必须将解决方案迁移到 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

假设我有一段代码可以插入这样的主从细节(简化):

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 值。

有什么建议吗?

谢谢指教

mysql .net vb.net entity-framework
1个回答
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有关,还是……

干杯,

费兰。

© www.soinside.com 2019 - 2024. All rights reserved.