下面代码可能会报如标题所示错误

var contacts = from c in db.Contact
                select c;

foreach (Contact c in contacts) {
    if (c.Phones.IsLoaded == false)
        c.Phones.Load();

    if (c.Phones.Count > 0) {
        foreach (ContactPhone p in c.Phones){
        }
    }
}

Tip: 真正执行查询是在foreach语句执行时才发生,在之前只是建立查询。

 

解决办法:

1,修改连接串,加上MultipleActiveResultSets=true

  <connectionStrings>
    <add name="connectionStrings" connectionString="Data Source=(local);Initial Catalog=xxx;uid=xx;pwd=xx;MultipleActiveResultSets=true" providerName="System.Data.SqlClient"/>
  </connectionStrings>

2, 一次性先把数据读出来

var contacts = from c in db.Contact
                select c;

List results = contacts.ToList();

foreach (Contact c in results){
}

提示:contacts.ToList() 的作用是强制加载contact列表,也就是先强制执行查询,再做后续处理。

 

原文:http://netknowledge.net/blogs/onmaterialize/archive/2006/09/20/Fixing-the-_2200_There-is-already-an-open-DataReader-associated-with-this-Command-which-must-be-closed-first_2E002200_-exception-in-Entity-Framework.aspx

关于 MultipleActiveResultSets 

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-02-25
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-09-27
  • 2021-11-04
  • 2022-03-07
  • 2022-12-23
  • 2021-07-02
相关资源
相似解决方案