powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / There is already an open DataReader
6 сообщений из 6, страница 1 из 1
There is already an open DataReader
    #38813245
Sabyrov.Talgat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ADO.NET(model.edmx) связал с БД MySQL.
Код: xml
1.
2.
3.
4.
5.
<connectionStrings>
<add name="ModelContainer" 
connectionString="metadata=res://*/Models.Model.csdl|res://*/Models.Model.ssdl|res://*/Models.Model.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=localhost;user id=root;database=proforientationdb;charset=utf8&quot;" 
providerName="System.Data.EntityClient" />
</connectionStrings>


пишу код:
Код: c#
1.
2.
3.
4.
using(var entityContext = new ModelContainer())
{
    var persons = entityContext.Persons.ToList();
}


Все работает
Теперь пишу так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
using(var entityContext = new ModelContainer())
{
    var cities = entityContext.Cities;
    foreach(var item in cities)
    {
        var persons = entityContext.Persons.Where(x=>x.cityId == item.id).ToList();
    }
}



в коде entityContext.Persons.Where(x=>x.cityId == item.id).ToList() выдает ошибку:
There is already an open DataReader associated with this Connection which must be closed first.

В чем проблема? Помогите пожалуйста.
...
Рейтинг: 0 / 0
There is already an open DataReader
    #38813297
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
материлизуй
Код: c#
1.
var cities = entityContext.Cities.ToList();
...
Рейтинг: 0 / 0
There is already an open DataReader
    #38813309
Sabyrov.Talgat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
handmadeFromRu,
Спасибо! Все заработало)
...
Рейтинг: 0 / 0
There is already an open DataReader
    #38813352
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRu,

там что только один коннект разрешен?
...
Рейтинг: 0 / 0
There is already an open DataReader
    #38813379
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos, для одного соединения можно использовать только один активный DataReader. Именно об этом говорит текст ошибки. Если бы у TC был бы MS SQL, то можно было бы использовать MARS (Multiple Active Recodrsets) и открыть несколько DataReader-ов, но у него MySQL.
...
Рейтинг: 0 / 0
There is already an open DataReader
    #38813415
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sabyrov.Talgat
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
using(var entityContext = new ModelContainer())
{
    var cities = entityContext.Cities.ToList();
    foreach (var item in cities)
    {
        var persons = entityContext.Persons.Where(x=>x.cityId == item.id).ToList();
    }
}


Данный код неэффективен с точки зрения кол-ва запросов. Первым запросом ты получишь список из N городов. Затем в цикле для каждого города будет новый запрос чтобы получить список людей. То есть кол-во запросов будет N+1. Таблицы City и Person наверняка связаны ключами. Если нет, то их следует связать. И значит в модели будут навигационные свойства между сущностями City и Person. И тогда код можно записать так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
using System.Data.Entity;
...
using (var entityContext = new ModelContainer())
{
    var cities = entityContext.Cities.Include(c => c.Persons);
    foreach (var city in cities)
    {
        var persons = city.Persons;
    }
}


При таком подходе запрос должен быть один. Проверить это можно с помощью IntelliTrace.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / There is already an open DataReader
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]