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_Facility.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 に答える