'Cannot access a disposed object' 保存对象时出错

'Cannot access a disposed object' error while saving object

我在使用 linq2sql 将对象保存到数据库时遇到问题

代码如下:

static DataContext dataContext = new DataContext();    
public static void ConfirmationPaymentOrder(ConfirmPayments data)
    {
        using (dataContext = new DataContext(DBConnection))
        {
            foreach (OrdersConfirm orderConfirm in data.OrdersConfirm)
            {
                var result = SendRequestToConfirm(orderConfirm.Orders, orderConfirm.UserName, orderConfirm.Password);

                dataContext.Orders.InsertOnSubmit(orderConfirm);

                dataContext.SubmitChanges();
            }
        }
    }

错误:

Cannot access a disposed object.
Object name: 'DataContext accessed after Dispose.'.

我该如何解决这个问题?

您不应该共享连接对象(静态),这会导致此类问题。静态对象应该只被创建。将声明移到方法中。

public static void ConfirmationPaymentOrder(ConfirmPayments data)
{
    using (var dataContext = new DataContext(DBConnection))
    {
        foreach (OrdersConfirm orderConfirm in data.OrdersConfirm)
        {
            var result = SendRequestToConfirm(orderConfirm.Orders, orderConfirm.UserName, orderConfirm.Password);

            dataContext.Orders.InsertOnSubmit(orderConfirm);
        }
        dataContext.SubmitChanges();
    }
}

注意到循环内的 SubmitChanges 做得很好:C. Knight

可能值得将 dataContext.SubmitChanges() 移到 foreach 循环之外。不知道这是否会解决问题,但可能值得一试,因为似乎没有任何理由(在您的示例中)多次调用 SubmitChanges()。

另外我想您之前没有意外地处理过 DBConnection 对象吧?