gpt4 book ai didi

.net - ObjectStateManager 中已存在具有相同键的对象。现有对象处于未更改状态

转载 作者:行者123 更新时间:2023-12-01 09:38:12 26 4
gpt4 key购买 nike

我正在尝试将 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

在 foo 对象中有 2 个关系。一个是实体 TB_FOO2,它是刚刚插入到代码中的对象,另一个是从数据库中选择的 TB_FOO3。

在循环的第一次迭代中,当它到达 _MyEntityManager.AddToTB_FOO(foo) 时,它会抛出错误

An object with the same key already exists in the ObjectStateManager. The existing object is in the Unchanged state. An object can only be added to the ObjectStateManager again if it is in the added state.

知道为什么会抛出这个错误吗?

最佳答案

您可能正在重新使用旧的 ObjectContext

这一行:

_MyEntityManager.AddToTB_FOO(foo)

... 如果上下文中已经存在与 foo 具有相同主键值的实体,则会失败。如果 foo 通过导航属性与其他已分离但在上下文中具有相同主键值的“孪生”实体相关联,它也会失败。

避免这些问题的最简单方法是为整个方法使用一个新的 ObjectContext 实例,并在完成后将其释放。长期存在的 ObjectContext 几乎总是会导致内存泄漏和真正令人困惑的错误。

关于.net - ObjectStateManager 中已存在具有相同键的对象。现有对象处于未更改状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4122818/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com