SubmitChangesが失敗したときに、失敗したInsertOnSubmitの取り消しに問題があります。ここでは、コードです:彼らは再び提出するヒットすると失敗したInsertOnSubmitをロールバックするにはどうすればよいですか? (VB.NET LINQ)
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)」と言っていますが、これを行う方法はありません。
はFYI:私はここからこのアプローチの主なを得た:https://msdn.microsoft.com/en-us/library/bb763516
任意の助けをいただければ幸いです。
の自分の答えを受け入れるだろう。これは動作しますが、それは仕事の異なる単位のためのdatacontextsを再利用しないためのより良いデザインです。何かをきれいにすることを忘れてしまった場合、バグを診断するのは難しいことです。また、ロードされたすべてのエンティティがメモリに保持されるため、メモリリークが発生します。 UOWごとに1つのコンテキストを作成するアーキテクチャを採用する。 – usr
私はあなたのコメントの最後の部分を理解していないので、UOWが何を意味するのか分かりませんか? 私はWindowごとにDataContextを持っていて、WindowのすべてのフィールドはDataContextにバインドされています。私はかなりWPFとLINQに新しいので、私は棒の間違った端をつかんで、それを実行するかもしれませんが、私は、DataContextは、ウィンドウが開いているときに存在する必要があるので、 –
作業ユニット= UOW。はい、ウィンドウあたりのコンテキストは良くありません。エンティティへのデータバインディングもそれほど推奨されません。マイクロソフトのチュートリアルでは、単純化とワウ効果のためにユーザーをその方向に導いていますが、実際のアプリケーションには適していません。 – usr