2016-07-21 35 views
2

我遇到了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)」

我假設我需要以某種方式刪除失敗的「NewFac」,其中包含不正確的值從「db.t_Facilities.InsertOnSubmit (NewFac)「在某種程度上被捕獲,但我沒有看到一種方法來做到這一點?

FYI:我這種方法的主要來自這裏: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

所以我可能完全錯誤,爲什麼它的工作(請告訴我爲什麼 - 我真的很想知道),但它的工作。

編輯: 如果有人能給出正確的原因,它的工作,我會接受他們的答案,而不是我自己的

+0

這工作,但它是更好的設計不重用不同的工作單位DataContexts。如果你忘記清理某些東西,你將會有各種難以診斷的錯誤。而且,這是內存泄漏,因爲所有加載的實體都保留在內存中。採用每個UOW創建一個上下文的架構。 – usr

+0

我不知道是什麼意思,所以我不明白你的評論的最後一部分? 我有每個窗口DataContext和窗口中的所有字段綁定到DataContext。我對WPF和LINQ相當陌生,所以我可能抓住了棒的錯誤末端並運行它,但是我不知道我該怎麼做,因爲DataContext需要在Window打開時存在? –

+0

工作單位= UOW。是的,每個窗口的上下文不好。與實體的數據綁定也不是那種可取的做法。微軟教程將用戶引導到這個方向,以簡化和哇的效果,但它不適合真正的應用程序。 – usr