已经处理了ObjectContext实例 – Winforms Entity Framework

我试图解决这个问题,并阅读有关此错误的内容,但无法找出解决方案。 我正在使用Entity框架为一个简单的Products Categories场景构建一个winforms应用程序。 这是我的模型的快照。 EDMX

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

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

后面的产品代码中的代码是

 List prods=ProductServices.GetAllProducts(); dgvProducts.DataSource = prods; 

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

你能告诉我是什么原因造成的吗?

编辑: Include完成了诀窍,在这个特定场景中,我更改了GetAllProducts(),如下所示

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

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

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

 public static List GetAllProducts() { List products = new List(); using (var entity = new SUIMSEntities1()) { entity.Include("Category"); //force eager loading of Category products = (from p in entity.Products select p).ToList(); return products; } } 

虽然您要返回List ,但似乎访问Category会导致数据库访问。 问题是您已经处理了访问数据库所需的上下文。