Dra*_*cir 3 .net entity-framework
我试图将foo类型的实体列表插入表TB_FOO.
Public Sub Insert(ByVal _lstFoo As List(Of TB_FOO))
Try
For i As Integer = 0 To _lstFoo.Count - 1
Dim foo As TB_FOO = _lstFoo(i)
_MyEntityManager.AddToTB_FOO(foo)
Next
_MyEntityManager.SaveChanges()
_MyEntityManager.AcceptAllChanges()
Catch ex As Exception
Debug.WriteLine(ex.StackTrace)
End Try
End Sub
Run Code Online (Sandbox Code Playgroud)
在foo对象中有2个关系.一个是实体TB_FOO2,它是刚刚在代码中插入的对象,另一个是从数据库中选择的TB_FOO3.
在循环的第一次迭代到达_MyEntityManager.AddToTB_FOO(foo)它时抛出错误
ObjectStateManager中已存在具有相同键的对象.现有对象处于Unchanged状态.如果对象处于添加状态,则只能再次将其添加到ObjectStateManager.
任何想法为什么抛出这个错误?
你可能正在重新使用旧的ObjectContext.
这一行:
_MyEntityManager.AddToTB_FOO(foo)
Run Code Online (Sandbox Code Playgroud)
...如果已经存在与foo上下文中具有相同主键值的实体,则将失败.如果foo通过导航属性与某个其他已分离的实体相关联,但在上下文中具有相同主键值的"双胞胎"实体,它也将失败.
没有这些问题的最简单方法是ObjectContext为整个方法使用一个新实例,并在完成后处理它.长寿ObjectContexts几乎总是会导致内存泄漏并且真正令人困惑的错误.
| 归档时间: |
|
| 查看次数: |
13733 次 |
| 最近记录: |