44 Stimmen

Entity Framework Der zugrunde liegende Anbieter ist beim Öffnen gescheitert

Unten befindet sich meine Verbindungszeichenfolge:

connectionString="metadata=res://*/EDMX.Test.csdl|res://*/EDMX.Test.ssdl|res://*/EDMX.Test.msl;provider=System.Data.SqlClient;provider connection string="Data Source=home_computer;Initial Catalog=db_Test;Persist Security Info=True;User ID=testUser;Password=$1234;MultipleActiveResultSets=True""

Hier ist der Code, bei dem das Programm stecken geblieben ist:

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

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

Nach Ausführung des obigen Codes überprüfte ich die Variable "query" und fand eine Ausnahme

Der zugrunde liegende Anbieter ist bei 'Open' gescheitert.

Ich habe überprüft:

  1. Die Verbindung zwischen Server und Computer ist normal
  2. Ich kann mich mit dem Benutzernamen "testUser" und dem Passwort $1234 in die Datenbank einloggen
  3. Ich habe die Sicherheitseinstellungen in der Datenbank (SQL Server) geprüft, dass die Erlaubnis für testUser erteilt wurde

Warum tritt diese Ausnahme auf? Ich verwende .NET 4.5


Hinzugefügt:

Ich habe es erneut versucht, habe mir die innere Ausnahme angesehen und es war: Ein netzwerkbezogener oder instanzspezifischer Fehler ist aufgetreten, während eine Verbindung mit SQL Server hergestellt wurde. Der Server wurde nicht gefunden oder war nicht zugänglich. Stellen Sie sicher, dass der Instanzname korrekt ist und dass SQL Server so konfiguriert ist, dass Remoteverbindungen zugelassen werden. (Anbieter: Named Pipes Provider, Fehler: 40 - Verbindung mit SQL Server konnte nicht geöffnet werden)

Ich weiß, dass es ein Netzwerkproblem sein könnte, aber ich habe die Firewall des Servers und auch meines Computers ausgeschaltet und es erneut versucht, aber immer noch kein Erfolg..


Gerade habe ich die Verbindungszeichenfolge in ein Programm kopiert, um diese Verbindung zu testen, und sie hat einwandfrei funktioniert.


Ich habe gerade alle Änderungen zurückgesetzt und nochmal getestet und es hat funktioniert

61voto

Ramesh Sivaraman Punkte 1285

Scheint ein Verbindungsproblem zu sein. Sie können die Datenverknüpfungseigenschaften verwenden, um zu überprüfen, ob die Verbindung in Ordnung ist. Gehen Sie wie folgt vor:

  1. Erstellen Sie eine leere Notizdatei und benennen Sie sie in "X.UDL" um
  2. Doppelklicken Sie, um es zu öffnen
  3. Wählen Sie unter dem Register Verbindungen den Servernamen/geben Sie den Namen ein und verwenden Sie die richtigen Anmeldeinformationen und Datenbank
  4. Klicken Sie auf OK, um es zu speichern.

Öffnen Sie nun die Datei in Notepad und vergleichen Sie die Verbindungseigenschaften.

16voto

Vishal Saini Punkte 173
  1. Suchen Sie nach "Komponentendiensten" in Programme und Dateien
  2. Gehen Sie zu Dienste
  3. Suchen Sie den Dienst "Verteilter Transaktionskoordinator"
  4. Klicken Sie mit der rechten Maustaste und starten Sie den Dienst neu

Sie haben gerade einen Neustart des Dienstes durchgeführt und der Code sollte ohne Fehler ausgeführt werden

7voto

Rustem Mustafin Punkte 949

Wir hatten die Verbindungszeichenfolge in web.config mit Data Source=localhost, und es gab diesen Fehler (MSSQL war auf der gleichen Maschine). Das Ändern auf tatsächlich `DOMAIN\MASCHINE' hat irgendeiner Weise geholfen.

6voto

Abdul Khaliq Punkte 1841

Die mögliche Lösung wird in diesem Code-Projekt-Tipp beschrieben:

Wie bereits erwähnt, verwenden Benutzer von IIS die Netzwerkdienst-Benutzeranmeldeinformationen, wenn sie versuchen, sich bei SQL Server anzumelden. Ändern Sie also einfach die Anwendungspool-Einstellungen in Ihrem IIS:

  1. Öffnen Sie den Internetinformationsdienste-Manager
  2. Klicken Sie auf Anwendungspools im linken Navigationsbaum.
  3. Wählen Sie Ihren Version Pool aus. In meinem Fall verwende ich ASP .Net v4.0. Wenn Sie diese Version nicht haben, wählen Sie DefaultAppPool.
  4. Klicken Sie mit der rechten Maustaste auf Schritt 3 und wählen Sie Erweiterte Einstellungen.
  5. Wählen Sie Identität im Eigenschaftenfenster und klicken Sie auf die Schaltfläche, um den Wert zu ändern.
  6. Wählen Sie Lokales System im Dropdown-Menü der integrierten Konten und klicken Sie auf OK. Das wars. Führen Sie jetzt Ihre Anwendung aus. Alles funktioniert gut.

5voto

Boney Punkte 1942

Immer auf Innere Ausnahme überprüfen, wenn vorhanden. In meinem Fall erwies sich die Innere Ausnahme als wirklich hilfreich bei der Ermittlung des Problems.

Meine Website funktionierte einwandfrei in der Entwicklerumgebung. Aber nachdem ich in die Produktion bereitgestellt hatte, begann sie diese Ausnahme zu werfen, aber die Innere Ausnahme besagte, dass die Anmeldung für den bestimmten Benutzer fehlgeschlagen war.
Also fand ich heraus, dass es etwas mit der Verbindung selbst zu tun hatte. Deshalb versuchte ich mich über SSMS anzumelden, und selbst das schlug fehl.

Schließlich fand ich heraus, dass die Ausnahme aus dem einfachen Grund auftrat, dass der SQL-Server nur die Windows-Authentifizierung aktiviert hatte und die SQL-Authentifizierung fehlschlug, die ich für die Authentifizierung verwendete.

Kurz gesagt, die Umstellung der Authentifizierung auf Gemischt (SQL und Windows) hat das Problem für mich behoben. :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X