2010-05-16 12 views
16

Wenn ich versuche, einen Datensatz einzufügen, erhalte ich folgende Fehlermeldung: Der zugrunde liegende Provider ist beim Öffnen fehlgeschlagen. Dieser Fehler tritt nur bei IIS und nicht beim Webserver von VWD 2008 auf. In der EventViewer bekomme ich diese Anwendung Fehler: Fehler beim Generieren einer Benutzerinstanz von SQL Server aufgrund eines Fehlers beim Starten des Prozesses für die Benutzerinstanz. Die Verbindung wird geschlossen. [CLIENT:]Entity Framework: "Der zugrunde liegende Provider ist beim Öffnen fehlgeschlagen"

<add name="ASPNETDBEntities" 
    connectionString=" 
     metadata=res://*/Models.FriendList.csdl|res://*/Models.FriendList.ssdl|res://*/Models.FriendList.msl; 
     provider=System.Data.SqlClient; 
     provider connection string=&quot; 
     Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\ASPNETDB.MDF; 
     Integrated Security=True; 
     Connect Timeout=30; 
     User Instance=True; 
     MultipleActiveResultSets=True&quot;" 
    providerName="System.Data.EntityClient" /> 

ich aspnetdb.mdf Datei benutzen und keine externe Datenbank. Ich habe genug dafür gesucht, aber keine Verwendung.

Alles funktioniert mit VWD Webserver

Antwort

9

Sie fein SQL-Konto für Ihre Web-Server die aspnetdb Datenbank zuzugreifen erstellen soll. Es verwendet derzeit eine integrierte Authentifizierung (versucht, sich mit der Identität anzumelden, die der Webserver zum Ausführen der Anwendung verwendet).

Im folgenden Beispiel wird die integrierte Authentifizierung verwendet. Ich würde jedoch SQL-Authentifizierung verwenden.

http://msdn.microsoft.com/en-us/library/ff649314.aspx

+0

So erstellen Sie ein SQL-Konto? Ich habe Sqlserver 2008 nicht installiert. Ich benutze Sqlserver 2008 Express Edition, die mit VWD 2008 installiert wird. Also, es gibt keine Abfrage Analysator oder Enterprise Manager. – pokrate

+0

Installieren Sie Microsoft SQL Server Management Studio Express http://www.microsoft.com/downloads/details.aspx?familyid=08E52AC2-1D62-45F6-9A4A-4B76A8564A2B&displaylang=de –

0

das unten stehende Attribut in der Verbindungszeichenfolge hinzufügen, die Sie gegeben haben.

<add 
    name="ASPNETDBEntities" 
    connectionString="metadata=res://*/Models.FriendList.csdl| 
         res://*Models.FriendList.ssdl|res://*/Models.FriendList.msl; 
         provider=System.Data.SqlClient;provider connection string=&quot; 
         Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\ASPNETDB.MDF; 
         Integrated Security=True;Connect Timeout=30; 
         User Instance=True; 
         MultipleActiveResultSets=True&quot;" 
    ProviderName="System.Data.EntityClient" 
    User Instance="False"/> 
+0

Nehmen Sie Ihre sehr obskuren Verweis auf "das unten stehende Attribut" (auf was beziehen Sie sich genau?) ist 'MultipleActiveResultSets = True', hat es für mich nicht funktioniert – Ortund

0

Vielleicht ist es zu spät zu beantworten, aber ich hatte das gleiche Problem.

Ich habe Scope Timeout (5 Minuten) hinzugefügt. Ich habe ein Beispiel gegeben.

Dim varIntervalo As New TimeSpan(0, 5, 0) 
Using varTransaccion As New TransactionScope(TransactionScopeOption.Required, varIntervalo) 
    For vari As Integer = 2 To varMatrizDatos.GetUpperBound(0) 
     Dim varWhateverAs New TABLE 
     varWhatever.ID_TABLE = something 
     varWhatever.DESC_TABLE = something else 
     varWhatever.DATE_TABLE = CDate(Now.Date) 

     varEntidades.AddToTABLESet(varWhatever) 
     varEntidades.SaveChanges() 
    Next 
    varTransaccion.Complete() 
End Using 

Vielleicht könnte dieser Code verbessert werden.

3

Ich bekam das gleiche Problem und nach dem Debugging sah ich, dass ich die neue Instanz von DB Entity bei jeder Aktion erstelle und eine neue Instanz von Db Entity zu machen bedeutet, eine neue Verbindung mit db zu öffnen.

Unten ist der Code:

Private tmpConnection As New DbModel.DbEntities 

so durch die Variable immer wieder seine Schaffung neuer Instanz DbEntites und öffnen neue Verbindung zu db aufrufen.

also schreibe ich eine kleine Funktion für diese und das löste mein Problem. Jetzt kein Fehler mehr.

Private tmpConnection As DbModel.DbEntities 

Public Function dbCon() As DbModel.DbEntities 

    If tmpConnection IsNot Nothing Then 

     If tmpConnection.Connection.State = ConnectionState.Closed Then 

      Try 
       tmpConnection.Connection.Open() 
       Return tmpConnection 
      Catch ex As Exception 
       My.Response.Redirect("dberror.aspx") 
      End Try 

     Else 

      Return tmpConnection 

     End If 

    Else 

     tmpConnection = New DbModel.DbEntities 

     Try 
      tmpConnection.Connection.Open() 
      Return tmpConnection 
     Catch ex As Exception 
      My.Response.Redirect("dberror.aspx") 
     End Try 

    End If 

    Return Nothing 
End Function 

und letzte Sache in Ihrer Connectionstring fügen Sie bitte "Connect Timeout = 30;"

das ist so perfekt für mich arbeiten

2

neue Instanz der DB Entity verwenden auf jede Aktion sollte Verbindung zu Ihrem SQL Server nicht physisch erstellen. Entity Framework verwendet den Verbindungspool, der für Ihren (Prozess, Anwendungsdomäne, Verbindungszeichenfolge) erstellt wurde, wie in Ihrer Verbindungszeichenfolge konfiguriert, um das Erstellen neuer Verbindungen zu vermeiden.

Dieses Problem ist sehr Umwelt- und Tweaking-Parameter (in Ihrem conn string) wie unten sollte der lösen problem-

Min Pool Size = 1;

Max. Poolgröße = 100; // Standard

Verbindungstimeout = 15; // in Sekunden

Pooling = true;

+0

Diese Antwort hat es für mich getan. Ich habe die Standardwerte für 'Max Pool Size' und 'Connection Timeout' verdoppelt. Vollständige Informationen finden Sie hier: https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring(v=vs.110).aspx Vorher habe ich jedoch zu ** SQL Server * gewechselt * von ** Windows ** Authentifizierung und stellte sicher, dass "DTC" war und läuft und Remote-Clients, die mein Problem nicht beheben, aber ich denke, sie waren auch notwendig. –

0

Zusätzlich wird diese Ausnahme ausgelöst, wenn die Tabelle, die Sie manipulieren werden gelöscht wird oder nicht vorhanden

0

Diese Ausnahme scheint geworfen zu werden, wenn es etwas gibt, das die Verbindungszeichenfolge ungültig sein verursachen könnte. Ungültige Anmeldeinformationen waren die Ursache für mich.

1

In meinem Fall habe ich Sql CE verwendet, und meine Verbindungszeichenfolge wurde mit einem absoluten Pfad anstelle des | DataDirectory | eingerichtet Variable. Dies wurde geändert und es begann auf dem Server zu arbeiten.

Offensichtlich hat es auf der Entwicklungsmaschine gut funktioniert.

0

Ich hatte ein ähnliches Problem und ich verwende auch IIS. Ich öffnete ein Befehlsfenster und tippte iisreset ein. Problem gelöst.

0

Dieses Problem tritt auf, wenn die Datenbank im ServerExplorer als Windows-Authentifizierung hinzugefügt wurde. Wenn Sie die SQL-Authentifizierung zum Zeitpunkt des Hinzufügens der Datenbank in ServerExplorer verwenden, wird das Problem behoben. Wenn Sie weiterhin die Windows-Authentifizierung verwenden und diese Ausnahme vermeiden, geben Sie die Benutzer-ID und das Kennwort der Datenbank in der Verbindungszeichenfolge in der webconfig-Datei an.

Dieses Problem tritt nur auf, wenn wir den Dienst in IIS hosten

Verwandte Themen