3

当 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

任何帮助,将不胜感激。

4

1 回答 1

2

现在这在技术上可能不正确,所以有人通知了;请给出这个有效的真正原因(所以它不是真的基于任何事实陈述,除了它有效,完全是我的观点 - 但它有效):

该解决方案在阅读其他有类似问题的其他人的几个问题时突然出现(所有这些问题都使用各种编程方式循环遍历 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

所以我可能完全错了它为什么起作用(请告诉我为什么 - 我真的很想知道),但它起作用了。

编辑: 如果有人能给出正确的原因,我会接受他们的回答而不是我自己的

于 2016-07-22T09:50:05.713 回答