我使用Linq to SQL类进行数据提取,并使用以下实体:
客户和订单通过客户ID上的FK约束链接,并显示在具有该关系的.dbml文件中
当我通过intellisense访问对象属性时,我可以看到Customer.Name, Customer.Address
等,但也可以看到链接的订单实体Customer.Orders
我的问题是,当我查询数据库以仅填充Customer实体并处置Datacontext时,我会收到错误
无法访问已处置的对象。对象名称:'访问DataContext 处理后。'。
public IEnumerable<Customer> GetCustomer(Int32 customerID)
{
// initialise
Customer cust = new Customer();
using (CustomerManager ctl = new CustomerManager())
{
// get customer, this returns a single customer entity
// i.e. datacontext.Customers.Where(m=> m.CustomerID == customerID).FirstOrDefault();
cust = ctl.SelectCustomer(customerID);
}
yield return cust;
}
我尝试将其更改为存储过程,即Customer_SelectResult
,这非常合适。这是我使用表格的时候。
有没有办法阻止子表导致此问题?
提前致谢
答案 0 :(得分:1)
在处理之前,您必须加载所有数据。有关解释,请参阅https://msdn.microsoft.com/en-us/library/bb399393(v=vs.110).aspx;有关解决方案,请参阅https://msdn.microsoft.com/en-us/library/bb386920(v=vs.110).aspx。
产生结果会产生另一个问题,迭代结果时会在数据库上执行查询。见https://blogs.msdn.microsoft.com/charlie/2007/12/10/linq-and-deferred-execution/
答案 1 :(得分:0)
关键字using
会自动在其中处理初始化对象。我想ctl
在GetCustomer
被调用后被释放。所以你可以试试没有它:
CustomerManager ctl = new CustomerManager()
yield return ctl.SelectCustomer(customerID);