2011-11-11 9 views
1

ASP.NET MVC 3Razor viewValueInjecterを使用しています。EF 4.1コードとValueInjecterからマッピングするときにDataReaderを開きます

マイビューモデル:

public class ProductViewModel 
{ 
    public int Id { get; set; } 
    public string SKU { get; set; } 
    public string Name { get; set; } 
    public ICollection<Specification> Specifications { get; set; } 
} 

Modelクラス:私は製品のリストを返し、その後、私はビューモデルに各製品をマッピングする必要があり

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

あなたの' GetAll'メソッドはどのように見えますか?内部Linqクエリとは何ですか? –

+0

ToList()を呼び出してみてください。 GetAll()メソッドの最後に – Omu

答えて

2

元のクエリのDataReaderが閉じられる前に結果のプロパティをレイジー読み込みすると、このエラーが表示されます。 GetAllの後にToListメソッドを呼び出してクエリの実行を強制的に実行するか、MultipleActiveResultSets設定を接続文字列に追加して複数のDataReaderをこのようにすることができます。

connectionString = "data source = YourServer; Integrated Security = SSPI ; 初期カタログ= YourDB; MultipleActiveResultSets = true "

関連する問題