我有一个代码在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导致异常,但我没有看到该字段导致此异常。一些例外属性是:
正如我所说,这适用于SQL Server(localdb),但不适用于MySQL。不幸的是,我无法识别GSPC_ResultadodDetalle的字段导致异常,但我怀疑GSPC_ResultadoDetalle无法从GSPC_Resultado获取ResultadoID值。
有什么建议吗?
谢谢你的建议,
费兰。
答案 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有关,或者......
干杯,
费兰。