首先从EF 4.1代码和ValueInjecter映射时打开DataReader

时间:2011-11-11 07:01:34

标签: asp.net-mvc-3 entity-framework-4.1 valueinjecter

我正在使用Entity Framework 4.1 code firstASP.NET MVC 3以及Razor viewValueInjecter

我的观点模型:

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.

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

当您在原始查询的DataReader关闭之前延迟加载结果的属性时,会出现该错误。 您可以在GetAll之后调用ToList方法以强制执行完整的查询,或者您可以将MultipleActiveResultSets配置添加到您的连接字符串以允许多个DataReader,如下所示:

的connectionString =“数据源= YourServer;集成安全性= SSPI; 初始目录= YourDB; MultipleActiveResultSets =真“