如何回滚失败的 InsertOnSubmit? (VB.NET 林克)
How do I rollback a failed InsertOnSubmit? (VB.NET LINQ)
我在 SubmitChanges 失败时撤消失败的 InsertOnSubmit 时遇到问题。这是代码:
Dim NewFac As New t_Facility With
{.FK_Instance_ID = guInstance_ID,
.FK_AccountType_ID = guAccountType_ID,
.FK_ATP_ID = guATP_ID,
.FK_Repayment_ID = guRepaymentType_ID,
.FK_InterestType_ID = guInterestType_ID,
.FK_FT_ID = guFacilitiesType_ID,
.NewRecord = bNewRecord,
.IndexNum = iIndexNum,
.SortCode = sSortCode,
.AccountNumber = sAccountNumber,
.Balance = decBalance,
.LastSanction = decLastSanctioned,
.Proposed = decProposed,
.Term_MTHs = iTerm_MTHS,
.Term_Expiry = dTerm_Expiry,
.InterestRate = decInterestRate,
.ArrangementFee = decArrangementFee,
.DateTime_From = Now(),
.ID = guFacilities_ID}
db.t_Facilities.InsertOnSubmit(NewFac)
Try
db.SubmitChanges()
Catch e As Exception
Console.WriteLine(e)
MessageBox.Show(e.Message & ". Please correct the field and try again", "ERROR", MessageBoxButton.OK, MessageBoxImage.Stop)
Exit Sub 'Takes the user back to the form to correct the value
End Try
当他们再次点击提交时,它返回并在同一点失败与原始提交相同的值忽略用户输入的新值。
"NewFac"中的值是更正后的新值。我在调试中手动检查了这一行:"db.t_Facilities.InsertOnSubmit(NewFac)"
我想我需要以某种方式从捕获的 "db.t_Facilities.InsertOnSubmit(NewFac)" 中删除包含错误值的失败 "NewFac",但我没有找到执行此操作的方法?
仅供参考:我从这里得到了这种方法的原理:https://msdn.microsoft.com/en-us/library/bb763516
如有任何帮助,我们将不胜感激。
现在这在技术上可能不正确,所以有人通知;请给出它起作用的真正原因(所以它不是真正基于任何事实陈述而不是它起作用,并且完全是我的意见 - 但它起作用):
我在阅读其他有类似问题的人提出的几个问题时突然想到了解决方案(所有人都使用各种方式以编程方式循环遍历 DataContext 以寻找匹配项),这些更改只是添加了 DataContext 似乎有效地充当数据库的离线 CLR,因此如果将 InsertOnSubmit 添加到其中,按理说 DeleteOnSubmit 应该将其删除,对吗?
考虑到这一点,我尝试了这个:
db.t_Facilities.InsertOnSubmit(NewFac)
Try
db.SubmitChanges()
Catch e As Exception
Console.WriteLine(e)
MessageBox.Show(e.Message & ". Please correct the field and try again", "ERROR", MessageBoxButton.OK, MessageBoxImage.Stop)
db.t_Facilities.DeleteOnSubmit(NewFac)
Exit Sub 'Takes the user back to the form to correct the value
End Try
成功了! :D
所以我可能完全错了为什么它有效(请告诉我为什么 - 我真的很想知道),但它有效。
编辑:
如果有人能给出正确的理由,我会接受他们的回答而不是我自己的
我在 SubmitChanges 失败时撤消失败的 InsertOnSubmit 时遇到问题。这是代码:
Dim NewFac As New t_Facility With
{.FK_Instance_ID = guInstance_ID,
.FK_AccountType_ID = guAccountType_ID,
.FK_ATP_ID = guATP_ID,
.FK_Repayment_ID = guRepaymentType_ID,
.FK_InterestType_ID = guInterestType_ID,
.FK_FT_ID = guFacilitiesType_ID,
.NewRecord = bNewRecord,
.IndexNum = iIndexNum,
.SortCode = sSortCode,
.AccountNumber = sAccountNumber,
.Balance = decBalance,
.LastSanction = decLastSanctioned,
.Proposed = decProposed,
.Term_MTHs = iTerm_MTHS,
.Term_Expiry = dTerm_Expiry,
.InterestRate = decInterestRate,
.ArrangementFee = decArrangementFee,
.DateTime_From = Now(),
.ID = guFacilities_ID}
db.t_Facilities.InsertOnSubmit(NewFac)
Try
db.SubmitChanges()
Catch e As Exception
Console.WriteLine(e)
MessageBox.Show(e.Message & ". Please correct the field and try again", "ERROR", MessageBoxButton.OK, MessageBoxImage.Stop)
Exit Sub 'Takes the user back to the form to correct the value
End Try
当他们再次点击提交时,它返回并在同一点失败与原始提交相同的值忽略用户输入的新值。
"NewFac"中的值是更正后的新值。我在调试中手动检查了这一行:"db.t_Facilities.InsertOnSubmit(NewFac)"
我想我需要以某种方式从捕获的 "db.t_Facilities.InsertOnSubmit(NewFac)" 中删除包含错误值的失败 "NewFac",但我没有找到执行此操作的方法?
仅供参考:我从这里得到了这种方法的原理:https://msdn.microsoft.com/en-us/library/bb763516
如有任何帮助,我们将不胜感激。
现在这在技术上可能不正确,所以有人通知;请给出它起作用的真正原因(所以它不是真正基于任何事实陈述而不是它起作用,并且完全是我的意见 - 但它起作用):
我在阅读其他有类似问题的人提出的几个问题时突然想到了解决方案(所有人都使用各种方式以编程方式循环遍历 DataContext 以寻找匹配项),这些更改只是添加了 DataContext 似乎有效地充当数据库的离线 CLR,因此如果将 InsertOnSubmit 添加到其中,按理说 DeleteOnSubmit 应该将其删除,对吗?
考虑到这一点,我尝试了这个:
db.t_Facilities.InsertOnSubmit(NewFac)
Try
db.SubmitChanges()
Catch e As Exception
Console.WriteLine(e)
MessageBox.Show(e.Message & ". Please correct the field and try again", "ERROR", MessageBoxButton.OK, MessageBoxImage.Stop)
db.t_Facilities.DeleteOnSubmit(NewFac)
Exit Sub 'Takes the user back to the form to correct the value
End Try
成功了! :D
所以我可能完全错了为什么它有效(请告诉我为什么 - 我真的很想知道),但它有效。
编辑: 如果有人能给出正确的理由,我会接受他们的回答而不是我自己的