';无法访问已释放的对象';保存对象时出错

本文关键字:对象 保存 出错 访问 释放 | 更新日期: 2023-09-27 18:21:57

使用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对象?