我有一个代码在 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 导致了异常,但我没有看到哪个字段导致了这个异常。一些异常属性是:
正如我所说,这适用于 SQL Server (localdb),但不适用于 MySQL。不幸的是,我无法识别 GSPC_ResultadodDetalle 的字段导致了异常,但我怀疑 GSPC_ResultadoDetalle 无法从 GSPC_Resultado 获取 ResultadoID 值。
有什么建议吗?
谢谢指教
好吧,最后我必须更改我的代码,强制实体框架在向主表添加信息后保存更改,然后添加详细信息,最后再次保存更改。
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有关,还是……
干杯,
费兰。