2016-11-03 76 views
0

在第一個添加方法我得到的異常: ObjectContext實例已被處置,不能再用於需要連接的操作。我得到System.ObjectDisposedException,似乎無法找到什麼是錯的

我知道我必須在使用括號(),它是和事務是公共虛擬

public void confirmPayments(List<int> Payments) 
    { 
     using (var db = new BankContext()) 
     { 
     try 
     { 
       foreach (int a in Payments) 
       { 
        foreach (Payment payment in db.Payment) 
        { 
         if (a == payment.Id) 
         { 
          Transaction senderTransaction = new Transaction 
          { 
           Amount = payment.Amount, 
           CreationDate = payment.CreationDate, 
           DueDate = payment.DueDate, 
           Receiver = payment.Receiver, 
           Sender = payment.Sender, 
           KIDMessage = payment.KIDMessage 
          }; 
          Transaction receiverTranscation = new Transaction 
          { 
           Amount = payment.Amount, 
           CreationDate = payment.CreationDate, 
           DueDate = payment.DueDate, 
           Receiver = payment.Receiver, 
           Sender = payment.Sender, 
           KIDMessage = payment.KIDMessage 
          }; 

          Account senderAccount = findAccount(senderTransaction.Sender); 
          Account receiverAccount = findAccount(receiverTranscation.Receiver); 

          senderAccount.Transaction.Add(senderTransaction); 
          senderAccount.Payment.Remove(payment); 
          senderAccount.Balance = senderAccount.Balance - senderTransaction.Amount; 

          receiverAccount.Transaction.Add(receiverTranscation); 
          receiverAccount.Balance = receiverAccount.Balance + receiverTranscation.Amount; 
         } 
        } 
       } 
       db.SaveChanges(); 
     } 
     catch (Exception error) 
      { 
       System.Diagnostics.Debug.WriteLine("FAILED TO CONFIRM PAYMENT: \n" + error.Message + "\n"); 
      } 
     } 
    } 

表/類,即時通訊試圖加入到(codefirst):

public class Account 
{ 
    [Key] 
    public int Id { get; set; } 
    public double Balance { get; set; } 
    public string AccountNumber { get; set; } 
    public string AccountType { get; set; } 
    public string CreationDate { get; set; } 
    public string ClosingDate { get; set; } 
    public virtual List<Transaction> Transaction { get; set; } 
    public virtual List<Payment> Payment { get; set; } 
} 
+1

你正在調用的函數(特別是findAccount)看起來很可疑;你應該可以附加調試器並獲取它拋出的實際位置。 – BradleyDotNET

+4

什麼是findAccount()?它是否從完全不同的數據庫上下文中獲取對象並處理該上下文? – David

+0

@大衛謝謝!,這工作..沒想到它會因爲findAccount()使用()相同的數據庫... –

回答

0

findAccount()也在使用(var db = New BankContext()),我認爲這與其他使用confirmPayments()的方法相反。

相關問題