Подтвердить что ты не робот

Entity Framework Основной провайдер отказался от Open

Ниже приведена строка подключения:

ConnectionString = "метаданных = Рез://*/EDMX.Test.csdl | Рез://*/EDMX.Test.ssdl | Рез://*/EDMX.Test.msl; поставщик = System.Data. SqlClient; поставщик строка подключения =" Источник данных = домашний_компьютер; Каталог = db_Test; Persist Security Info = True; Пользователь ID = TestUser; Пароль = $тысячи двести тридцать четыре; MultipleActiveResultSets = True " "

Вот код, в котором программа застревает:

EDMX.TestingEntity context = new EDMX.TestingEntity();

var query = from t in context.User
            where t.UserName == _userName
            select t;

После выполнения вышеуказанного кода я проверяю запрос переменной и обнаружил исключение

Недействительный базовый поставщик отказал.

Я проверил:

  • Соединение между сервером и компьютером в норме
  • Я могу войти в базу данных с именем пользователя testuser и с паролем $1234
  • Я проверил параметры безопасности в базе данных (SQL Server), которые были предоставлены testUser

Почему происходит это исключение? Я использую .net 4.5


Добавлено:

Я попробовал еще раз, посмотрю на внутреннее исключение, и это было: При установлении соединения с SQL Server возникла связанная с сетью или конкретная ошибка экземпляра. Сервер не найден или не был доступен. Проверьте правильность имени экземпляра и настройте SQL Server для удаленного подключения. (поставщик: поставщик Named Pipes, ошибка: 40 - не удалось открыть подключение к SQL Server)

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


Только что скопировал строку подключения в программу для проверки этого соединения, и она функционировала хорошо.


Я просто откатываю все изменения и снова тестирую, и он работал

4b9b3361

Ответ 1

Похоже на проблему подключения. Вы можете использовать свойства канала данных, чтобы узнать, хорошо ли соединение. Выполните следующие действия:

  • Создайте пустой блокнот и переименуйте его в "X.UDL"
  • Дважды щелкните, чтобы открыть его
  • В разделе "Подключения" выберите имя сервера/введите имя используйте правильные учетные данные и DB
  • Нажмите OK, чтобы сохранить его.

Теперь откройте файл в Блокноте и сравните свойства строки подключения.

Ответ 2

  • Поиск "Службы компонентов" в программах и файлах
  • Перейти к сервисам
  • Найти "Служба координаторов распределенных транзакций"
  • Щелкните правой кнопкой мыши и перезагрузите службу.

Вы только что перезапустили службу, и код должен работать без ошибок

Ответ 3

Возможное решение описано в этом совете проекта кода:

Как упоминалось, учетные данные пользователя службы сети IIS пользователя при попытке входа в SQL Server. Поэтому просто измените настройки пула приложений в своем IIS:

  • Открыть диспетчер служб Интернета
  • Нажмите "Пулы приложений" в левом навигационном дереве.
  • Выберите пул версий. В моем случае я использую ASP.Net v4.0. Если у вас нет этой версии, выберите DefaultAppPool.
  • Щелкните правой кнопкой мыши на шаге 3 и выберите дополнительные параметры.
  • Выберите "Идентификация" в окне свойств и нажмите кнопку, чтобы изменить значение.
  • Выберите "Локальная система" в поле "Встроенные учетные записи" и нажмите "ОК". Это. Теперь запустите приложение. Все работает хорошо.

Ответ 4

У нас была строка подключения в web.config с Data Source=localhost, и была эта ошибка (MSSQL был на том же компьютере). Изменение его в реальном DOMAIN\MACHINE помогло, в некоторой степени.

Ответ 5

Прежде всего, проверьте следующее.

При создании Edmx вы указали бы имя вашей строки подключения. который входит в конфигурацию приложения проекта с Entity.

Скопировали ли вы одну и ту же строку соединения в основной файл конфигурации. Также имя должно быть таким же, как вы указали при создании файла EDMX.

Ответ 6

Мой клиент сообщил об этой ошибке. Я обнаружил, что он возился с *.ldf файлами. Он скопировал * ldf файл в одну базу данных и переименовал его в соответствии со второй базой данных (которую я попросил его поместить в папку).

Я воспроизвел тот же сценарий и получил эту же ошибку в моей системе разработки. Ошибка была исправлена ​​после удаления * ldf файла (ов).

Ответ 7

Всегда проверяйте Внутреннее Исключение, если оно есть. В моем случае Inner Exception оказалось очень полезным при определении проблемы.

Мой сайт отлично работал в среде Dev. Но после того, как я был развернут на производство, он начал выдавать это исключение, но Inner Exception заявляло, что Login не удалось для конкретного пользователя.
Поэтому я понял, что это связано с самой связью. Поэтому попытался войти в систему с использованием SSMS, и даже это не удалось.

В конце концов выяснилось, что исключение появилось по той простой причине, что на сервере SQL была включена только проверка подлинности Windows, а проверка подлинности SQL была неудачной, и это было тем, что я использовал для аутентификации.

Короче говоря, изменение аутентификации в Mixed (SQL и Windows) исправило проблему для меня.:)

Ответ 8

Для меня, когда это обычно начинается, у меня к удаленному рабочему столу в службу и при минимальном перезапуске IIS. Обычно он начинает появляться сразу после развертывания кода. В редких случаях мне пришлось перезапустить службы SQL и IIS. Я написал пакет script, чтобы взять параметр (1 или 2) и настроить его либо на перезапуск IIS (т.е. 1), либо на полный ядерный (т.е. 2).

Ответ 9

В моем случае я разрешил ошибку, добавив пароль подключения в строку подключения.

Во время настройки EF-модели я выбрал вариант исключения конфиденциальных данных из строки подключения. Таким образом, пароль не был включен первоначально.

Ответ 10

Откройте командную строку как администратор и введите netsh Winsock reset

Перезагрузите систему и повторите попытку.

Ответ 11

Если вы используете локальный файл .mdf, вероятно, программное обеспечение для синхронизации, которое Dropbox попыталось синхронизировать два файла журнала (.ldf) на двух разных компьютерах вы можете удалить файлы журнала из каталога bin и убедиться, что свойства .mdf- > Скопировать в каталог вывода → Копировать, если новый который скопирует выбранный файл DB, и он будет записываться в каталог bin. ! Alert- если ваш файл DB только изменился в каталоге bin, все изменения будут удалены!

Ответ 12

Я часто получаю это исключение во время работы на моей машине разработки, особенно после того, как я делаю изменение кода, перестраиваю код и затем выполняю связанные с ним веб-страницы. Однако проблема уходит за меня, если я увеличиваю параметр CommandTimeout до 120 секунд или более (например, установите context.Database.CommandTimeout = 120 перед оператором LINQ). Хотя это изначально было спрошено 3 года назад, это может помочь кому-то найти ответ. Моя теория - VisualStudio требует времени для преобразования встроенных двоичных библиотек в машинный код и сбоев при попытке подключения к SQL Server после компиляции точно в срок.

Ответ 13

У меня была эта ошибка, и она была вызвана опечаткой в ​​строке подключения в App.config.

Ответ 14

откройте диспетчер конфигурации SQL Server, затем щелкните по службам sql-сервера, список будет отображаться из списка, щелкнув правой кнопкой мыши на сервере sql, и нажмите кнопку "Пуск"

Ответ 15

ОШИБКА: исключение типа 'System.Data.Entity.Core.EntityException' произошел в EntityFramework.SqlServer.dll, но не был обработан пользователем. код Дополнительная информация: базовый поставщик отказал Open.

РЕШЕНИЕ:

  • Добавить в модель:

     [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
     [Key] 
    
  • Пространство имен:

    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;
    
  • Пример:

    namespace MvcApplication1.Models
    {
      [Table("tblEmployee")]
      public class Employee
      {
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        [Key]
        public int EmplyeeID { get; set; }         
        public string Name { get; set; }
        public string Gender { get; set; }
        public string City { get; set; }      
      }
    }