gpt4 book ai didi

c# - 从数据库中删除记录时如何解决 Linq to SQL ChangeConflictException

转载 作者:太空宇宙 更新时间:2023-11-03 15:56:19 24 4
gpt4 key购买 nike

我目前正在尝试解决一个问题,即我们的应用程序偶尔会抛出 ChangeConflictException 并显示以下错误消息:无法刷新指定的对象。该对象不再存在于数据库中。

我可以通过执行以下步骤来重现此错误消息。首先,我们加载一个显示服务工作单详细信息的表单。与此表单关联的 WorkOrder 对象有许多关联(例如客户、工作、工作项目、地址等)。数据上下文保持打开状态,直到窗体关闭。接下来,如果在加载此表单时删除其中一个关联,则当用户尝试保存与表单关联的 WorkOrder 时,将导致 ChangeConflictException,因为 session 在缓存中有一个对象,其 ID 不再存在于数据库中。

我明白为什么会出现异常,但我想知道处理此类情况的最佳做法是什么。另外,有没有一种方法可以识别哪个对象不再存在于数据库中?

最佳答案

我在 Asp.net/vb.net 中遇到了类似的问题

Dim db As New MyDataContext
MyObject.Detach()
db.MyTable.Attach(MyObject)
db.Refresh(RefreshMode.KeepCurrentValues, MyObject)'Error Happens Here
db.SubmitChanges()

对我有帮助的解决方案

Dim db As New MyDataContext
MyObject.Detach()
db.MyTable.Attach(MyObject)
'Commented Out the Line
db.SubmitChanges()

Refresh() 方法不会从数据库中检索新记录。

我不完全确定这是为什么 - 这只是 Linq to SQL 产品团队做出的选择之一(大概有充分的理由)。这可能与刷新方法有关

主要是为乐观并发冲突解决而设计的 1要获取新输入的记录,您需要:

在同一 DataContext 上重新发出新查询创建一个新的 DataContext 实例您选择哪个选项取决于上下文(没有双关语意)。需要牢记的是 Linq to SQL DataContext 的预期工作单元性质和 Datacontext 的预期短生命周期。

希望对你有帮助

关于c# - 从数据库中删除记录时如何解决 Linq to SQL ChangeConflictException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23431131/

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