';无法访问已释放的对象';保存对象时出错
本文关键字:对象 保存 出错 访问 释放 | 更新日期: 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对象?