'无法访问已处置的对象'保存对象时出错

时间:2015-11-13 10:57:21

标签: c# .net linq linq-to-sql

使用linq2sql

将对象保存到db时出现问题

以下是代码:

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.'.

如何解决问题?

2 个答案:

答案 0 :(得分:2)

你不应该共享一个连接对象(静态),这会导致这种问题。静态对象应该只创建一个。在方法中移动声明。

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

答案 1 :(得分:1)

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

另外我假设您之前没有意外处理过DBConnection对象?