我正在使用Entity Framework 4.1 code first
与ASP.NET MVC 3
以及Razor view
和ValueInjecter
。
我的观点模型:
public class ProductViewModel
{
public int Id { get; set; }
public string SKU { get; set; }
public string Name { get; set; }
public ICollection<Specification> Specifications { get; set; }
}
模特课:
public class Product : IEntity
{
public int Id { get; set; }
public string SKU { get; set; }
public string Name { get; set; }
public virtual ICollection<Specification> Specifications { get; set; }
}
我的动作方法,我返回产品列表,然后我需要将每个产品映射到视图模型。
public ActionResult JsonGetProductList()
{
IEnumerable<Product> productList = productService.GetAll();
// Mapping
IList<ProductViewModel> viewModelList = productList.Select(c => new ProductViewModel().InjectFrom(c)).Cast<ProductViewModel>().ToList();
}
它在映射部件上出错,并出现以下错误:
There is already an open DataReader associated with this Command which must be closed first.
我该如何解决这个问题?
答案 0 :(得分:2)
当您在原始查询的DataReader关闭之前延迟加载结果的属性时,会出现该错误。 您可以在GetAll之后调用ToList方法以强制执行完整的查询,或者您可以将MultipleActiveResultSets配置添加到您的连接字符串以允许多个DataReader,如下所示:
的connectionString =“数据源= YourServer;集成安全性= SSPI; 初始目录= YourDB; MultipleActiveResultSets =真“