Linq to SQL child table throwing Data Context Dispose 问题

Linq to SQL child table throwing Data Context Dispose issue

我正在使用 Linq to SQL 类 进行数据提取并具有以下实体:

Customer 和 Order 通过 CustomerID 上的 FK 约束链接,并以该关系出现在我的 .dbml 文件中

当我通过智能感知访问对象属性时,我可以看到 Customer.Name, Customer.Address 等以及链接的订单实体 Customer.Orders

我的问题是,当我查询数据库以仅填充 Customer 实体并处理 Datacontext 时,出现错误

Cannot access a disposed object. Object name: 'DataContext accessed after Dispose.'.

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,并且效果非常好。就是我用表的时候。

有什么方法可以防止子表导致这个问题吗?

提前致谢

您必须先加载所有数据,然后再进行处理。请参阅 https://msdn.microsoft.com/en-us/library/bb399393(v=vs.110).aspx for an explanation and 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/

关键字using自动释放其中的初始化对象。我想 ctl 是在调用 GetCustomer 之后处理的。所以你可以不用它试试:

CustomerManager ctl = new CustomerManager()
yield return ctl.SelectCustomer(customerID);