'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 对象吧?
我在使用 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 对象吧?