我在類似於這個問題的一些問題中搜索瞭解決方案,但無法解決該問題,所以請提供清晰的關於如何解決問題的方法解決這個問題。例外:對象實例已被處置,不能再用於需要連接的操作
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;
}
}
發佈您的'createOrder'函數。我敢打賭,它使用了一個你隨後處理的'DbContext',然後你試圖獲得你返回的數據庫項目的子項目(這反過來又試圖調用數據庫)。 – mattytommo 2013-03-21 08:35:05
@mattytommo:posted。我能夠訪問OrderDetails中的值(請參閱第一行代碼)。但第二行發生異常。 – 2013-03-21 08:53:02
是的,這是因爲'OrderDetails'已經加載到內存中,但它的子項沒有。你將不得不顯示你的'BLOrder.CreateOrder'功能。 – mattytommo 2013-03-21 08:55:09