0

重複の可能性:
Entity Framework: このコマンドに関連付けられた開いている DataReader が既に存在します

私はこれらのクラスを持っています:

    public class VwSelectBrochures
{
    public List<SelectBrochure> SelectBrochures { get; set; }
}

   public class SelectBrochure
{
    public int BrochureId { get; set; }
    public string UrlImage { get; set; }
    public string Description { get; set; }
    public string Cat1Description { get; set; }
    public string Cat2Description { get; set; }
    public string Cat3Description { get; set; }
    public List<LangSelection> Languages { get; set; }
}

public class LangSelection
{
    public int Id { get; set; }
    public string Description { get; set; }
    public bool Vink { get; set; }
}

そしてこのコード行:

var dbmodel2 =
from x in
    brochures.AsEnumerable().Select(
        x => new SelectBrochure {BrochureId = x.Id, Description = x.Description, UrlImage = x.UrlImage,
        Languages = new List<LangSelection>(from y in x.BrochureLanguages select new LangSelection(){Description = y.Language.Description, Id = y.Language.Id})})
select x;

Brochures と BrochureLanguages は私のデータベース モデルです。

「from y in x.BrochureLanguages」を実行できないため、エラーが発生することはわかっていますが、これを修正する方法がわかりません。

私が本当に望んでいるのは、すべてのパンフレットを VwSelectBrochures クラスに入れることです。

4

3 に答える 3

2

アーキテクチャの修正を推奨するには情報が少なすぎますが、接続文字列でMARSを有効にすることで回避できます。

于 2012-06-20T11:29:58.183 に答える
1

最も簡単な方法は、最初に ( を使用して)全体brochuresをメモリに取り込むことです。ToList()

var dbmodel2 =
from x in
    brochures.ToList().Select(
        x => new SelectBrochure {BrochureId = x.Id, Description = x.Description, UrlImage = x.UrlImage,
        Languages = new List<LangSelection>(from y in x.BrochureLanguages select new LangSelection(){Description = y.Language.Description, Id = y.Language.Id})})
select x;

この方法では、実行時にfrom y in ...他の DataReader が開いていません。を使用する別のオプションがあると思いますjoin

于 2012-06-20T11:35:49.507 に答える
0

私はクエリ式に少し自信がなく、個人的には基礎となる拡張メソッドを使用して結果を取得することを好みます。申し訳ありませんが、この回答はクエリ式の形式ではありませんが、試していただけますか?

    var dbmodel2 = brochures.AsEnumerable().Select(x => new SelectBrochure {
        BrochureId = x.Id, 
        Description = x.Description, 
        UrlImage = x.UrlImage,
        Languages = x.BrochureLanguages.Select(y => new LangSelection() {
            Description = y.Language.Description, 
            Id = y.Language.Id
        })
    }).ToList(); // this executes the whole query

繰り返しになりますが、クエリ式の形式について100%確信が持てないので、外側の「from x in ... select x」は不要だと感じ、それがエラーの原因になっているのではないかと思いました。

于 2012-06-20T11:53:17.650 に答える