2016-11-03 3 views
0

Bei der ersten add-Methode bekomme ich die Ausnahme: Die ObjectContext-Instanz wurde entsorgt und kann nicht mehr für Operationen verwendet werden, die eine Verbindung erfordern.Ich bekomme System.ObjectDisposedException, scheint nicht zu finden, was falsch ist

Ich weiß, dass ich in den mit() Klammern sein muß, und es ist, und Transaktion ist public virtual

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

Die Tabelle/Klasse, die in (codefirst) hinzuzufügen, im Versuch:

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

Die Funktionen, die Sie aufrufen (findAccount im Besonderen) sehen sehr verdächtig aus; Sie sollten in der Lage sein, den Debugger anzuhängen und den tatsächlichen Speicherort zu ermitteln. – BradleyDotNET

+4

Was ist 'findAccount()'? Ruft es ein Objekt aus einem völlig anderen DB-Kontext ab und entsorgt diesen Kontext? – David

+0

@David Danke !, das hat funktioniert ... Ich glaube nicht, dass es wichtig wäre, weil findAccount() dieselbe Datenbank verwendet ... –

Antwort

0

findAccount() verwendet auch (var db = Neue BankContext()), die ich denke, mit der anderen Verwendung von der confirmPayment().

Verwandte Themen