webentwicklung-frage-antwort-db.com.de

Entity Framework Der zugrunde liegende Anbieter ist beim Öffnen fehlgeschlagen

Unten ist meine Verbindungszeichenfolge:

connectionString = "metadata = res: //*/EDMX.Test.csdl | res: //*/EDMX.Test.ssdl | res: //*/EDMX.Test.msl; provider = System.Data.SqlClient; provider Verbindungszeichenfolge = "Datenquelle = Heimcomputer; Anfangsbuchstabe Catalog = db_Test; Persist Security Info = True; Benutzer ID = testUser; Passwort = $ 1234; MultipleActiveResultSets = True ""

Hier ist der Code, an dem das Programm hängengeblieben ist:

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

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

Nachdem ich den obigen Code ausgeführt habe, überprüfe ich die Variablenabfrage und fand eine Ausnahme 

Der zugrunde liegende Anbieter ist beim Öffnen fehlgeschlagen.

Ich habe geprüft:

  1. Die Verbindung zwischen Server und Computer ist normal 
  2. Ich kann mich mit dem Benutzernamen testuser und dem Passwort $ 1234 bei der Datenbank anmelden 
  3. Ich habe die Sicherheitseinstellungen in der Datenbank (SQL Server) überprüft, dass die Berechtigung testUser erteilt wurde

Warum passiert diese Ausnahme? Ich verwende .net 4.5


Hinzugefügt:

Ich habe es noch einmal versucht, die innere Ausnahme zu sehen und es war: Beim Herstellen einer Verbindung zu SQL Server ist ein netzwerkbedingter oder instanzspezifischer Fehler aufgetreten. Der Server wurde nicht gefunden oder war nicht erreichbar. Stellen Sie sicher, dass der Instanzname korrekt ist und dass SQL Server für das Zulassen von Remoteverbindungen konfiguriert ist. (Anbieter: Named Pipes Provider, Fehler: 40 - Verbindung zu SQL Server konnte nicht hergestellt werden)

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


Gerade jetzt Kopierte die Verbindungszeichenfolge in ein Programm, um diese Verbindung zu testen und sie funktionierte gut.


Ich habe einfach alle Änderungen rückgängig gemacht und erneut getestet, und es hat funktioniert

28
User2012384

Scheint wie ein Verbindungsproblem. Sie können die Datenverknüpfungseigenschaften verwenden, um herauszufinden, ob die Verbindung einwandfrei ist. Mach Folgendes:

  1. Erstellen Sie einen leeren Notizblock und benennen Sie ihn in "X.UDL" um.
  2. Doppelklicken Sie darauf, um es zu öffnen
  3. Wählen Sie auf der Registerkarte "Verbindungen" den Servernamen/geben Sie den Namen ein Verwenden Sie die richtigen Anmeldeinformationen und die richtige Datenbank
  4. Klicken Sie auf OK, um es zu speichern. 

Öffnen Sie nun die Datei in Notepad und vergleichen Sie die Eigenschaften der Verbindungszeichenfolge.

40
  1. Suchen Sie nach "Komponentendienste" in "Programme und Dateien"
  2. Gehen Sie zu Dienste
  3. Dienst "Distributed Transaction Coordinator" suchen
  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 fehlerfrei ausgeführt werden

9
Vishal Saini

Eine mögliche Lösung wird in diesem Code Project-Tipp beschrieben:

Wie bereits erwähnt IIS Benutzer-Netzwerkdienst-Benutzer-Anmeldeinformationen beim Versuch, sich im SQL-Server anzumelden. Ändern Sie also einfach die Anwendungspooleinstellungen in Ihrem IIS:

  1. Öffnen Sie den Internet Information Service Manager
  2. Klicken Sie in der linken Navigationsstruktur auf Anwendungspools.
  3. Wählen Sie Ihren Versionspool. In meinem Fall verwende ich ASP .Net v4.0. Wenn Sie diese Version nicht haben, wählen Sie DefaultAppPool aus.
  4. Klicken Sie mit der rechten Maustaste auf Schritt 3 und wählen Sie erweiterte Einstellungen aus.
  5. Wählen Sie im Eigenschaftenfenster Identität aus und klicken Sie auf die Schaltfläche, um den Wert zu ändern.
  6. Wählen Sie im Kombinationsfeld Integrierte Konten Lokales System aus und klicken Sie auf OK . Das ist es. Führen Sie jetzt Ihre Anwendung aus. Alles funktioniert gut.
6
Ayaat Shifa

Wir hatten eine Verbindungszeichenfolge in web.config mit Data Source=localhost, und dieser Fehler ist aufgetreten (MSSQL befand sich auf demselben Rechner). Irgendwann half es, es in "DOMAIN\MACHINE" zu ändern.

5
Rustem Mustafin

Bitte überprüfen Sie zuerst die folgenden Punkte.

Beim Generieren des Edmx hätten Sie Ihrer Verbindungszeichenfolge einen Namen gegeben. das geht in die app config des projekts mit der entity.

Haben Sie dieselbe Verbindungszeichenfolge in Ihre Hauptkonfigurationsdatei kopiert ... __ Auch der Name sollte derselbe sein, den Sie beim Generieren der EDMX-Datei angegeben haben.

4

Überprüfen Sie, ob eine innere Ausnahme vorliegt. In meinem Fall erwies sich Inner Exception als sehr hilfreich, um das Problem herauszufinden.

Meine Website funktionierte gut in Dev-Umgebung. Nach der Bereitstellung für die Produktion begann diese Ausnahme jedoch ausgegeben zu werden, aber die innere Ausnahme sagte, dass der Login für den jeweiligen Benutzer fehlgeschlagen ist.
Ich fand heraus, dass es etwas mit der Verbindung selbst zu tun hatte. Also versucht, sich mit SSMS anzumelden und auch das ist fehlgeschlagen.

Schließlich fand ich heraus, dass diese Ausnahme aus dem einfachen Grund auftauchte, dass auf dem SQL-Server nur die Windows-Authentifizierung aktiviert war und die SQL-Authentifizierung fehlgeschlagen war, was ich für die Authentifizierung verwendete. 

Kurz gesagt, das Ändern der Authentifizierung in Mixed (SQL und Windows) hat das Problem für mich behoben. :)

4
Boney

Mein Kunde hat diesen Fehler gemeldet. Ich stellte fest, dass er mit * .ldf-Dateien herumspielte. Er kopierte die * ldf-Datei in eine Datenbank und benannte sie in eine zweite Datenbank um.

Ich habe das gleiche Szenario repliziert und diesen Fehler in meinem Entwicklungssystem erhalten. Fehler behoben, nachdem die * ldf-Datei (en) gelöscht wurden.

3
user3290439

Ich habe diesen Fehler festgestellt, als ein Kollege versuchte, eine Verbindung zu einer Datenbank herzustellen, die hinter einem VPN geschützt ist. Der Benutzer hatte unbekannte zu einem drahtlosen Netzwerk ohne VPN-Zugang gewechselt. Eine Möglichkeit, dieses Szenario zu testen, besteht darin, zu prüfen, ob Sie eine Verbindung auf andere Weise, z. B. SSMS, herstellen können und ob dies ebenfalls fehlschlägt.

3
drobison

Ich bekam dieses Problem, während ich weiterhin einen Unit-Test ausführte, der eine Methode aufruft, die Parallelverarbeitung verwendet. Ich weiß, dass Teile von EF nicht threadsicher sind und nicht mit den Vorgängen synchronisiert. 

Mein Stack-Trace zeigte folgendes:

     at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at System.Threading.Tasks.Task.Wait()
   at System.Threading.Tasks.Parallel.ForWorker[TLocal](Int32 fromInclusive, Int32 toExclusive, ParallelOptions parallelOptions, Action`1 body, Action`2 bodyWithState, Func`4 bodyWithLocal, Func`1 localInit, Action`1 localFinally)
   at System.Threading.Tasks.Parallel.ForEachWorker[TSource,TLocal](IList`1 list, ParallelOptions parallelOptions, Action`1 body, Action`2 bodyWithState, Action`3 bodyWithStateAndIndex, Func`4 bodyWithStateAndLocal, Func`5 bodyWithEverything, Func`1 localInit, Action`1 localFinally)
   at System.Threading.Tasks.Parallel.ForEachWorker[TSource,TLocal](IEnumerable`1 source, ParallelOptions parallelOptions, Action`1 body, Action`2 bodyWithState, Action`3 bodyWithStateAndIndex, Func`4 bodyWithStateAndLocal, Func`5 bodyWithEverything, Func`1 localInit, Action`1 localFinally)
   at System.Threading.Tasks.Parallel.ForEach[TSource](IEnumerable`1 source, Action`1 body)

Das ist der Hinweis, dem ich folgte. Als ich zu einem Single-Thread-Foreach anstatt zu Parallel zurückging, ging das Problem weg. 

Joey

2
Joey Morgan

Für mich, wenn das normalerweise passiert, muss ich den Remote-Desktop in den Dienst einfügen und IIS mindestens neu starten. Es wird normalerweise sofort nach der Bereitstellung von Code angezeigt. In einigen seltenen Fällen musste ich die SQL-Dienste und den IIS neu starten. Ich habe ein Batch-Skript geschrieben, um einen Parameter (1 oder 2) zu nehmen und es einrichten zu lassen, entweder einen Neustart von IIS (d. H. 1) durchzuführen oder vollständig nuklear zu werden (d. H. 2). 

2
Kevin B Burns

Ich hatte diesen Fehler und er wurde durch einen Tippfehler in der Verbindungszeichenfolge in App.config verursacht.

1
user744621

Ich bekomme diese Ausnahme oft, wenn ich auf meinem Entwicklungscomputer laufe, insbesondere nachdem ich eine Codeänderung vorgenommen habe, den Code neu aufbaut und dann eine oder mehrere verknüpfte Webseiten ausführt. Das Problem verschwindet jedoch für mich, wenn ich den Parameter CommandTimeout auf 120 Sekunden oder mehr aufstiege (z. B. set context.Database.CommandTimeout = 120 vor der LINQ-Anweisung). Während dies vor 3 Jahren ursprünglich gefragt wurde, kann es jemandem helfen, nach einer Antwort zu suchen. Meine Theorie ist, dass VisualStudio Zeit benötigt, um die erstellten binären Bibliotheken in Maschinencode umzuwandeln, und beim Versuch, nach dem Just-in-Time-Kompilieren eine Verbindung zu SQL Server herzustellen, eine Zeitüberschreitung.

1
Daniel

In meinem Fall habe ich den Fehler durch Hinzufügen eines Verbindungskennworts in die Verbindungszeichenfolge behoben.

Beim Einrichten des EF-Modells hatte ich die Option ausgewählt, vertrauliche Daten aus der Verbindungszeichenfolge auszuschließen. Das Passwort wurde also anfangs nicht mitgeliefert. 

1

Wenn Sie eine lokale .mdf-Datei verwenden, hat wahrscheinlich eine Synchronisierungssoftware wie Dropbox versucht, zwei Protokolldateien (.ldf) Auf zwei verschiedenen Computern zu synchronisieren. Sie können die Protokolldateien aus dem bin-Verzeichnis und löschen Stellen Sie sicher, dass die .mdf-Eigenschaften-> In Ausgabeverzeichnis kopieren -> Kopieren, falls neuer die ausgewählte DB-Datei und das zugehörige Protokoll in das bin-Verzeichnis kopiert .! Alert- wenn Ihre DB-Datei nur in der bin Verzeichnis alle Änderungen werden verworfen!

0
Oamsalem

Öffnen Sie den SQL Server-Konfigurations-Manager und klicken Sie dann auf SQL Server-Dienste. Eine Liste wird angezeigt. Klicken Sie mit der rechten Maustaste auf SQL Server und klicken Sie auf Start

0
RafiO

Versuchen Sie dies - Öffnen Sie den Befehl Eingabeaufforderung als Administrator und geben Sie Folgendes ein: netsh Winsock reset

Starten Sie Ihr System neu und versuchen Sie es erneut.

0
Amar Pawar