Как откатить сбойный InsertOnSubmit? (VB.NET LINQ)

У меня возникла проблема с отменой неудачного InsertOnSubmit при сбое SubmitChanges. Вот код:

    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)"

Я предполагаю, что мне нужно каким-то образом удалить неудачный "NewFac", который содержит неправильные значения из "db.t_Facilities.InsertOnSubmit (NewFac)" в улове, как-то, но я не вижу способа сделать это?

К вашему сведению: я получил принцип этого подхода здесь: https://msdn.microsoft.com/en-us/library/bb763516

Любая помощь будет оценена.

1 ответ

Решение

Теперь это, вероятно, не будет технически правильным, поэтому кто-то сообщил; пожалуйста, объясните реальную причину, по которой это сработало (поэтому на самом деле это не основано ни на каком факте, кроме как сработавшем, и полностью мое мнение - но это сработало)

Решение пришло ко мне, когда я прочитал несколько вопросов от разных людей, у которых были похожие проблемы (все использовали различные способы Программного циклического перебора 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

Так что я могу быть совершенно не прав относительно того, почему это сработало (пожалуйста, сообщите мне, почему - я искренне хотел бы знать), но это сработало.

РЕДАКТИРОВАТЬ:Если кто-то может дать правильную причину, по которой он работал, я приму их ответ вместо моего собственного

Другие вопросы по тегам