2013-06-25 5 views
1

Я использую ExecuteStoreQuery и делаю список IEnumerable<>. Когда я получаю этот список с foreach и использую какой-то запрос linq в этой области, он дает следующую ошибку:C# 4.0 Entity Framework ExecuteStoreQuery: есть уже открытый DataReader

Существует уже открытый DataReader, связанный с этим соединением, который должен быть закрыт первым.

Что я должен сделать для этого?

Мой код выглядит следующим образом:

//IEnumerable function 
public IEnumerable<NewTable> YirmiAjansTweetList() 
{ 
    string nativeSQLQuery = "Select t1.id,t1.baslik,t1.url,t1.gtarih,t3.ck,t3.cs,t2.token,t2.tokensecret from yirmiajanstweets t1 join uyeler t2 ON(t1.uid=t2.u_id) join uygulamalar t3 ON(t2.uyid=t3.u_id) where t1.gtarih is not null and t1.durum=0 and t1.gtarih<Now();"; 
    IEnumerable<NewTable> newList = db.ExecuteStoreQuery<NewTable>(nativeSQLQuery, System.Data.Objects.MergeOption.NoTracking); 

    if (newList != null) 
    { 
     return newList; 
    } 
    else 
    { 
     return null; 
    } 
} 

public class NewTable 
{ 
    public int id { get; set; } 
    public string baslik { get; set; } 
    public string url { get; set; } 
    public DateTime gtarih { get; set; } 
    public string ck { get; set; } 
    public string cs { get; set; } 
    public string token { get; set; } 
    public string tokensecret { get; set; } 
} 

//look for a record function 
public yirmiajanstweets YirmiAjansKayitBak(int _id) 
{ 
    yirmiajanstweets ya = db.yirmiajanstweets.FirstOrDefault(f => f.id == _id); 

    if (ya != null) 
    { 
     return ya; 
    } 
    else 
    { 
     return null; 
    } 
} 

//i get this list like that with foreach 
IEnumerable<dynamic> ya = yaBLL.YirmiAjansTweetList().AsEnumerable(); 

if (ya != null) 
{ 
    foreach (var item in ya) 
    { 
     //when read this line give error 
     var myRecord = YirmiAjansKayitBak(item.id); 
    } 
} 
else 
{ 
    Response.Write("Not found !"); 
} 
+0

Закройте открытую DataReader ?? –

+0

Я использую работу фрейма объекта, как я могу его закрыть? – ASPMaker

ответ

0

Попробуйте добавить MultipleActiveResultSets=true в строке подключения.

+0

Я собирался предложить MARS. Однако он действительно должен найти открытый читатель в коде где-нибудь :) – SQLMason

0

Попробуйте загрузить результат запроса в виде списка, прежде чем итерацию по коллекции:

IEnumerable<dynamic> ya = yaBLL.YirmiAjansTweetList().ToList(); 
Смежные вопросы