0

可能重复:
实体框架:已经有一个打开的 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 是我的数据库模型。

我知道我收到了错误,因为我无法执行“来自 x.BrochureLanguages 中的 y”,但我不知道如何解决这个问题。

我真正想要的是将所有小册子放入 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% 确定,我觉得外部的“从 x in ... select x”是多余的,并想知道这是否可能导致错误。

于 2012-06-20T11:53:17.650 回答