2

我正在尝试解决此问题,并确实阅读了有关此错误的内容,但无法找到解决方案。我正在使用实体框架为简单的产品类别场景构建一个 winforms 应用程序。这是我的模型的快照。 edmx

ProductService 类中检索所有产品的代码是

public static List<Product> GetAllProducts()
{
    List<Product> products = new List<Product>();
    using (var entity = new SUIMSEntities1())
    {
        products = (from p in entity.Products
                    select p).ToList();
        return products;
    }            
}

后面的 Products 代码中的代码是

List<Product> prods=ProductServices.GetAllProducts();
dgvProducts.DataSource = prods;

当我尝试在 datagridview 中加载产品时,显示以下错误: 在此处输入图像描述

你能告诉我是什么导致了这个问题吗?

编辑: Include 成功了,在这个特定的场景中,我改变了 GetAllProducts() 如下

        public static List<Product> GetAllProducts()
        {
            using (var entity = new SUIMSEntities1())
            {
                List<Product> products = entity.Products.Include("Category").ToList();
                return products;                
            }            
        }
4

2 回答 2

4

默认情况下,实体框架 (EF) 将延迟加载您的 Category 对象集。因为您的 Category 对象集是延迟加载的,所以当稍后一些其他代码引用 Category 时,EF 将尝试加载该集。但是,此时,您的上下文已被处理,导致您看到的错误。

您需要做的是强制上下文急切地加载您的 Category 实体集,如下所示:

public static List<Product> GetAllProducts()
{
    List<Product> products = new List<Product>();
    using (var entity = new SUIMSEntities1())
    {
        entity.Include("Category");  //force eager loading of Category
        products = (from p in entity.Products
                    select p).ToList();
        return products;
    }            
}
于 2012-08-09T23:28:42.710 回答
2

尽管您返回的是List<Product>,但访问 Category 似乎会导致数据库访问。问题是您已经处理了访问数据库所需的上下文。

于 2012-08-09T23:21:53.463 回答