SQL Azure + Получение ошибки "Уже открыт DataReader, связанный с этой командой..", даже после установки "MultipleActiveResultSets = True
Мы сталкиваемся с некоторыми проблемами с развернутой версией нашего приложения в облаке.
Наше приложение представляет собой проект ASP.NET MVC 3 с платформой ADO.NET Entity Framework.
В соответствии с блоками msdn нам нужно добавить параметр "MultipleActiveResultSets = True (для Entity Framework с SQL azure)) в нашей строке подключения к базе данных, которую мы по праву сделали.
При выполнении запроса к базе данных из нашего приложения мы получаем следующее исключение: "Существует уже открытый DataReader, связанный с этой Командой, который должен быть закрыт первым".,
который, как я полагаю, очень связан с свойством MultipleActiveResultSets = True.
Приложение отлично работает в локальной среде с нашей локально развернутой базой данных, а также с использованием базы данных SQL azure (в локальной среде).
Но при развертывании нашего облачного приложения мы получаем вышеупомянутую ошибку. Кажется, что свойство MultipleActiveResultSets = True не считывается из строки подключения.
Строка подключения, которую я использую, выглядит следующим образом:
<connectionStrings>
<add name="#DBInstanceName#" connectionString="Data Source=tcp:#server#.database.windows.net,1433;Initial Catalog=#DBName#;User ID="UserName#@#server#;Password="#password#";MultipleActiveResultSets=True" providerName="System.Data.SqlClient"/>
</connectionStrings>
Я могу подключиться к базе данных SQL Azure, используя приведенную выше строку соединения из локально развернутого приложения без каких-либо исключений. Но одно и то же приложение при развертывании в облаке с использованием одной и той же строки соединения дает мне вышеупомянутую ошибку.
Не могли бы вы помочь нам установить то же самое?
Ответы
Ответ 1
У меня только одна проблема. Я попытался установить "MultipleActiveResultSets = True" в соединении Web.config - никаких результатов.
Наконец, я разрешил проблему, вручную отредактировав строку Connection непосредственно на Azure Dashboard для веб-сайта. На вкладке "Настройка" есть настройки "Строки подключения", где вы должны вручную добавить "MultipleActiveResultSets = True"; строка.
После этого я наконец-то работал с MARS.
Ответ 2
В качестве альтернативы вы можете добавить в строку соединения "MultipleActiveResultSets = true" и обновить целевой web.config при использовании функции "Опубликовать" в Visual Studio. Обязательно выберите "Использовать эту строку подключения во время выполнения (обновить пункт назначения web.config)". ![enter image description here]()
Ответ 3
Вам нужно установить multipleresultsets = true в connectionstring и перезапустить.
Удаленный ответ
Изменить: Это обсуждается! Проверьте комментарий ниже... Я не успел исследовать...
Я думаю, что он уже включен.
Я не мог найти источник на месте, но Фейсал Мохамуд (Менеджер программ, Entity Framework) заявляет следующее в 2010 году: "Само собой разумеется, мы обязательно убедимся, что MARS автоматически включается для SQL Azure когда мы собираемся выпустить следующее обновление для продукт". Найдено здесь: http://blogs.msdn.com/b/adonet/archive/2010/06/09/remember-to-re-enable-mars-in-your-sql-azure-based-ef-apps.aspx
Ответ 4
Мы находимся на новом портале Azure и тоже имеем эту проблему. MARS работал во всех локальных средах разработчиков, но бросил на Azure такое же неприятное исключение. Мы проверили, что строка подключения в физическом файле web.config, развернутом в Azure, содержала MultipleActiveResultSets=true;
, но приложение, похоже, не выполнялось. В конечном итоге работала с экземпляром приложения > настройки > подключения к данным и удалением соединения с тем же именем, что и вопрос, указанный в файле web.config. Я предполагаю, что тот, что Azure хранит, превосходит ту, что находится в развернутом web.config.
Ответ 5
Попробуйте назначить MultipleActiveResultSets в коде. Не читается или не работает?
SqlConnectionStringBuilder.MultipleActiveResultSets
Ответ 6
У меня такая же проблема, но я решил MultipleActiveResultSets = True в строке соединения из помощника публикации, так как irium