I am trying to solve this problem and did read content regarding this error but was unable to figure out a solution.
I am building a winforms application using Entity framework for a simple Products Categories scenario.
Here is a snapshot of my model.
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;
}
}
产品代码后面的代码是
List<Product> prods=ProductServices.GetAllProducts();
dgvProducts.DataSource = prods;
When I try to load the Products in datagridview, the following error is shown:
您能告诉我是什么原因导致了这个问题吗?
Edit:Include 成功了,在这个特定场景中,我更改了 GetAllProducts() 如下
public static List<Product> GetAllProducts()
{
using (var entity = new SUIMSEntities1())
{
List<Product> products = entity.Products.Include("Category").ToList();
return products;
}
}
默认情况下,实体框架 (EF) 将延迟加载您的类别对象集。由于您的 Category 对象集是延迟加载的,因此当其他代码稍后引用 Category 时,EF 将尝试加载该集。但是,此时您的上下文已被处理,导致您看到错误。
您需要做的是强制上下文急切地加载您的类别实体集,如下所示:
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;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)