已经处理了ObjectContext实例 – Winforms Entity Framework
我试图解决这个问题,并阅读有关此错误的内容,但无法找出解决方案。 我正在使用Entity框架为一个简单的Products Categories场景构建一个winforms应用程序。 这是我的模型的快照。
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会导致数据库访问。 问题是您已经处理了访问数据库所需的上下文。