2013-03-21 31 views
4

我在類似於這個問題的一些問題中搜索瞭解決方案,但無法解決該問題,所以請提供清晰的關於如何解決問題的方法解決這個問題。例外:對象實例已被處置,不能再用於需要連接的操作

Order orderDetails= createOrder(); 
long voucherId = (long)orderDetails.Vouchers.FirstOrDefault().Number; // exception here.. 

並且createOrder函數返回Order類型的orderDetails。

券是我的憑證表,

號是在憑證表列的名稱。

我不知道爲什麼如何解決這個異常。有關它的任何想法? 第一部分: * 編輯: *

private Order createOrder() 
    { 
     IList<OfferInfo> offerInformation = new List<OfferInfo>(); 
     OfferInfo offer = new OfferInfo() 
     { 
      OfferId = 2, 
      Message = "test msg", 
      CreatedDate = System.DateTime.Now, 
      Gender = "male", 
      ReceiverName = "john", 
      ReceiverEmail = "[email protected]" 
     }; 
     offerInformation.Add(offer); 

     Order order = new Order(); 
     order.Id = 721; 
     order.Amount = 1000; 
     order.CreatedDate = System.DateTime.Now; 
     order.User = userDetails; 
     return BLOrder.CreateOrder(order, offerInformation); 
    } 

注: 它inturns調用從返回訂單類型檢索數據的BLOrder的CreateOrder。 (如果VAR是訂單類型和返回,這將有一些像,var.xxx = 「一些價值」,var.yyy = 「一些價值」。)

第二部分:

public static Order CreateOrder(Order order, IList<OfferInfo> offerList) 
    { 
     order = CreateNewOrder(order, offerList); 
     Intreat.MSMQ.MSMQHelper.AddOffers(order, offerList); 
     return order; 
    } 

private static Order CreateNewOrder(Order order, IList<OfferInfo> offerList, bool updateUser = true) 
    { 
     try 
     { 

      if (updateUser) 
      { 
       VerifyUserDetails(order.User); 

       senderUserId = BLUser.UpdateUser(order.User); 
       order.User = null; 
       Logger.WriteLog("Sender user added/updated successfully. UserID:" + senderUserId.ToString()); 
      } 
      else 
       senderUserId = order.UserId; 

      if (order.Company != null) 
       order.CompanyId = BLCompany.UpdateCompany(order.Company).Id; 

      VerifyOrderDetails(order, offerList); 

      using (IntreatEntities intreat = new IntreatEntities()) 
      { 
       foreach (OfferInfo offer in offerList) 
       { 
        orderAmt = (double)((from po in intreat.PartnerOffers 
                where po.Id == offer.OfferId 
                select po.Price * offer.Quantity).ToList()).Sum(); 
        order.Amount += orderAmt; 

        if (offer.IsPos) 
         tableOrderAmt += orderAmt; 
       } 
       if ((tableOrderAmt > 0) && (order.TipPercentage != null) && (order.TipPercentage.Value) > 0) 
       { 
        double tipAmt = (tableOrderAmt * (order.TipPercentage.Value * .01)); 
        order.TipAmount = Math.Round(tipAmt); 
        order.Amount = (double)(order.Amount + order.TipAmount); 
       } 
       order.CreatedDate = DateTime.Now; 
       order.UserId = (Guid)senderUserId; 
       Logger.WriteLog(string.Format(CultureInfo.InvariantCulture, "order.TableNumber:{0}", order.TableNumber == null ? "(empty)" : order.TableNumber.ToString())); 

       intreat.Orders.AddObject(order); 
       intreat.SaveChanges(); 

       Logger.WriteLog("Order added successfully. OrderId:" + order.Id.ToString(CultureInfo.InvariantCulture)); 
      } 
      return order; 
     } 
     catch (Exception ex) 
     { 
      Logger.WriteLog(ex); 
      throw; 
     } 
    } 
+3

發佈您的'createOrder'函數。我敢打賭,它使用了一個你隨後處理的'DbContext',然後你試圖獲得你返回的數據庫項目的子項目(這反過來又試圖調用數據庫)。 – mattytommo 2013-03-21 08:35:05

+0

@mattytommo:posted。我能夠訪問OrderDetails中的值(請參閱第一行代碼)。但第二行發生異常。 – 2013-03-21 08:53:02

+0

是的,這是因爲'OrderDetails'已經加載到內存中,但它的子項沒有。你將不得不顯示你的'BLOrder.CreateOrder'功能。 – mattytommo 2013-03-21 08:55:09

回答

2

包含此行代碼order.Vouchers.Load();如下所示並嘗試

private static Order CreateNewOrder(Order order, IList<OfferInfo> offerList, bool updateUser = true) 
{ 
    try 
    { 
     Guid? senderUserId = null; 

     /// Process user first so that, the user details are stored even if there is any error in other areas 
     /// 
     if (updateUser) 
     { 
      VerifyUserDetails(order.User); 

      /// Create/update sending user. 
      /// 
      senderUserId = BLUser.UpdateUser(order.User); 
      order.User = null; 
      Logger.WriteLog("Sender user added/updated successfully. UserID:" + senderUserId.ToString()); 
     } 
     else 
      senderUserId = order.UserId; 

     /// Add company details before processing the order, so that the company details are stored if there is any error in other areas. 
     /// 
     if (order.Company != null) 
      order.CompanyId = BLCompany.UpdateCompany(order.Company).Id; 

     /// Verify and process order 
     /// 
     VerifyOrderDetails(order, offerList); 

     using (IntreatEntities intreat = new IntreatEntities()) 
     { 
      /// Find total amount for the order 
      double orderAmt = 0; 
      double tableOrderAmt = 0; 

      order.Amount = 0; 
      foreach (OfferInfo offer in offerList) 
      { 
       orderAmt = (double)((from po in intreat.PartnerOffers 
               where po.Id == offer.OfferId 
               select po.Price * offer.Quantity).ToList()).Sum(); 
       order.Amount += orderAmt; 

       //If isPos, consider for tip calculation 
       if (offer.IsPos) 
        tableOrderAmt += orderAmt; 

      } 

      //check if tip amount has to be calculated, by checking for the tableorderAmt 
      if ((tableOrderAmt > 0) && (order.TipPercentage != null) && (order.TipPercentage.Value) > 0) 
      { 
       double tipAmt = (tableOrderAmt * (order.TipPercentage.Value * .01)); 
       order.TipAmount = Math.Round(tipAmt); 
       order.Amount = (double)(order.Amount + order.TipAmount); 
      } 
      order.CreatedDate = DateTime.Now; 
      order.UserId = (Guid)senderUserId; 
      Logger.WriteLog(string.Format(CultureInfo.InvariantCulture, "order.TableNumber:{0}", order.TableNumber == null ? "(empty)" : order.TableNumber.ToString())); 

      /// Create and save order in db 
      /// 
      intreat.Orders.AddObject(order); 
      intreat.SaveChanges(); 
      order.Vouchers.Load(); 
      Logger.WriteLog("Order added successfully. OrderId:" + order.Id.ToString(CultureInfo.InvariantCulture)); 
     } 
     return order; 
    } 
    catch (Exception ex) 
    { 
     Logger.WriteLog(ex); 
     throw; 
    } 
} 
+0

告訴我發生了什麼 – tariq 2013-03-21 09:13:49

+0

噢!該異常消失(現在IsLoaded屬性爲true)。謝啦 !! – 2013-03-21 09:23:40

+0

歡迎您:) – tariq 2013-03-21 09:24:44

相關問題