Schlüsselwort nicht unterstützte Datenquelle

82

Ich habe eine asp.net-mvc-Anwendung mit der Standardmitgliedschaftsdatenbank. Ich greife über ADO.NET Entity Framework darauf zu.

Jetzt möchte ich es auf IIS verschieben, aber es sind mehrere Probleme aufgetreten. Ich musste SQL Server Management Studio installieren, neue Datenbank erstellen und dort alle Daten aus der vorherigen MDF-Datei importieren. Das einzige, was ich noch tun muss (soweit ich weiß), ist, zur Verbindungszeichenfolge zu wechseln. Ich bin jedoch nicht wirklich erfahren damit und bekomme immer wieder das Keyword, das nicht unterstützt wird: 'Datenquelle'. Ausnahme. Hier ist meine Verbindungszeichenfolge:

<add name="ASPNETDBEntities" 
     connectionString="Data Source=MONTGOMERY-DEV\SQLEXPRESS;Initial Catalog=ASPNETDB;Integrated Security=True;" 
     providerName="System.Data.EntityClient" />

Irgendwelche Ideen, was ist los?

Trimack
quelle
Ich hatte diesen Fehler, als ich das falsche Startprojekt ausgewählt hatte, sodass VS meine Verbindungszeichenfolgen nicht finden konnte. Stellen Sie sicher, dass ein Startprojekt mit app.config ausgewählt ist.
wnbates

Antworten:

145

Was Sie haben, ist eine gültige ADO.NET-Verbindungszeichenfolge - aber KEINE gültige Entity Framework-Verbindungszeichenfolge.

Die EF-Verbindungszeichenfolge würde ungefähr so ​​aussehen:

<connectionStrings> 
  <add name="NorthwindEntities" connectionString=
     "metadata=.\Northwind.csdl|.\Northwind.ssdl|.\Northwind.msl;
      provider=System.Data.SqlClient;
      provider connection string=&quot;Data Source=SERVER\SQL2000;Initial Catalog=Northwind;Integrated Security=True;MultipleActiveResultSets=False&quot;" 
      providerName="System.Data.EntityClient" /> 
</connectionStrings>

Sie vermissen alle metadata=und providerName=Elemente in Ihrer EF-Verbindungszeichenfolge. Sie haben im Grunde nur das, was in dem provider connection stringTeil enthalten ist.

Wenn Sie den EDMX-Designer verwenden, sollten Sie in Ihrer web.config oder app.config eine gültige EF-Verbindungszeichenfolge für Sie erstellen.

Marc

UPDATE: OK, ich verstehe, was Sie versuchen: Sie benötigen eine zweite "ADO.NET" -Verbindungszeichenfolge nur für die ASP.NET-Benutzer- / Mitgliedschaftsdatenbank. Ihre Zeichenfolge ist in Ordnung, aber der Anbietername ist falsch - es müsste "System.Data.SqlClient" sein - diese Verbindung verwendet kein ENtity Framework - geben Sie dann nicht den "EntityClient" dafür an!

<add name="ASPNETMembership" 
     connectionString="Data Source=MONTGOMERY-DEV\SQLEXPRESS;Initial Catalog=ASPNETDB;Integrated Security=True;" 
     providerName="System.Data.SqlClient" />

Wenn Sie providerName=System.Data.EntityClient==> Entity Framework- Verbindungszeichenfolge angeben (mit den Metadaten = und allem).

Wenn Sie providerName=System.Data.SqlClient==> gerade ADO.NET SQL Server-Verbindungszeichenfolge ohne alle EF-Ergänzungen benötigen und angeben

marc_s
quelle
In der Tat, aber dann erhalte ich die Ausnahme. Die physische Datei "C: \ OVSS \ Stavicky \ trunk \ Stavicky \ App_Data \ aspnetdb.mdf" kann nicht geöffnet werden. Betriebssystemfehler 5: "5 (Text für diesen Fehler konnte nicht abgerufen werden. Grund: 15105)". Der Versuch, eine automatisch benannte Datenbank für die Datei C: \ OVSS \ Stavicky \ trunk \ Stavicky \ App_Data \ aspnetdb.mdf anzuhängen, ist fehlgeschlagen. Eine Datenbank mit demselben Namen ist vorhanden oder die angegebene Datei kann nicht geöffnet werden oder befindet sich auf der UNC-Freigabe. Aus einigen Quellen dachte ich, das ist falsch. Trotzdem danke.
Trimack
Ich bin nicht sicher, ob ich das Problem mit der zweiten Verbindungszeichenfolge verstehe. Ich sollte dort die vom Designer generierte lassen und die ASPNETMembership hinzufügen, die Sie mir geschrieben haben?
Trimack
Wenn Sie Ihre Entitäten im EDMX-Designer haben, müssen Sie über einen "EntityClient" und eine EF-Verbindungszeichenfolge auf diese zugreifen. Wenn Sie das sofort einsatzbereite ASP.NET-Mitgliedschaftssystem verwenden, ist es NICHT Teil Ihres EF-Modells. Wenn Sie also eine Verbindungszeichenfolge für Ihre ASP.NET-Mitgliedschaftsdatenbank erstellen, können Sie "EntityClient" nicht als das verwenden Anbieter - Verwenden Sie SqlClient.
marc_s
Also ja - Sie müssen beide - die EF - Verbindungszeichenfolge Ihr EDMX System für Sie generiert, PLUS eine zweite - normale ADO.NET - Verbindungszeichenfolge - für den ASP.NET - Mitgliedschaftssystem.
marc_s
1
Ich habe dir gerade das 100. Upvote für deinen Beitrag gegeben. Frohe Weihnachten :)
RBT
7

Dieses Problem kann auftreten, wenn Sie Ihre Verbindungszeichenfolgen für web.config (oder app.config) nach Index referenzieren ...

var con = ConfigurationManager.ConnectionStrings[0].ConnectionString;

Die auf Null basierende Verbindungszeichenfolge ist nicht immer diejenige in Ihrer Konfigurationsdatei, da sie standardmäßig andere von weiter oben im Stapel erbt .

Die empfohlenen Ansätze sind, über Ihren Namen auf Ihre Verbindung zuzugreifen ...

var con = ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString;

oder um zuerst das connnectionStrings-Element in Ihrer Konfigurationsdatei zu löschen ...

<connectionStrings>
    <clear/>
    <add name="MyConnection" connectionString="...
Glatzkopf
quelle
2

Ich hatte das gleiche Problem.
aber dieser Code funktioniert gut, probieren Sie es aus.

<add name="MyCon" connectionString="Server=****;initial catalog=PortalDb;user id=**;password=**;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" />
Satish Singh
quelle
0

Ich hatte dieses Problem, als ich mit der Verwendung von Entity Framework begann. Es trat auf, als ich die alte SQL Server-Verbindung nicht in EntityFrameWork-Verbindung änderte.

Lösung: Stellen Sie in der Datei, in der die Verbindung über die web.config-Datei "add name =" Entities "connectionString = XYZ" hergestellt wird, sicher, dass Sie sich auf die richtige Verbindung beziehen. In meinem Fall musste ich dies tun

        public static string MyEntityFrameworkConnection
    {
        get
        {
             return ConfigurationManager.ConnectionStrings["Entities"].ConnectionString;
        }

    }

Rufen Sie MyEntityFrameworkConnection auf, wenn eine Verbindung hergestellt werden muss.

private string strConnection= Library.DataAccessLayer.DBfile.AdoSomething.MyEntityFrameworkConnection;

Hinweis: Die Verbindung in der Datei web.config wird automatisch generiert, wenn der Lösung ein Entitätsmodell hinzugefügt wird.

Mubarak
quelle
0

Ich weiß, dass dies ein alter Beitrag ist, aber ich habe kürzlich den gleichen Fehler erhalten. Für das, was es wert ist, ist hier eine andere Lösung:

Dies ist normalerweise ein Verbindungszeichenfolgenfehler. Überprüfen Sie das Format Ihrer Verbindungszeichenfolge. Sie können nach "Entity Framework-Verbindungszeichenfolge" suchen oder den obigen Vorschlägen folgen.

In meinem Fall war meine Verbindungszeichenfolge jedoch in Ordnung und der Fehler wurde durch etwas völlig anderes verursacht. Ich hoffe, dies hilft jemandem:

  1. Zuerst hatte ich einen EDMX-Fehler : Es gab eine neue Datenbanktabelle im EDMX und die Tabelle war nicht in meiner Datenbank vorhanden (komisch ist der Fehler, dass der Fehler nicht sehr offensichtlich war, weil er stattdessen nicht in meinem EDMX- oder Ausgabefenster angezeigt wurde Es wurde im Visual Studio im Fenster 'Fehlerliste' unter 'Warnungen' versteckt. Ich habe diesen Fehler behoben, indem ich die fehlende Tabelle zu meiner Datenbank hinzugefügt habe. Aber ich war tatsächlich damit beschäftigt, eine gespeicherte Prozedur hinzuzufügen und bekam immer noch den Fehler 'Datenquelle'. Sehen Sie unten, wie ich ihn behoben habe:

  2. Fehler bei gespeicherten Prozeduren : Ich habe versucht, eine gespeicherte Prozedur hinzuzufügen, und jedes Mal, wenn ich sie über das EDMX-Entwurfsfenster hinzufügte, wurde der Fehler "Datenquelle" angezeigt. Die Lösung bestand darin, die gespeicherte Prozedur als leer hinzuzufügen (ich behielt den Namen und die Deklaration des gespeicherten Prozesses bei, löschte jedoch den Inhalt des gespeicherten Prozesses und ersetzte ihn durch 'select 1' und versuchte erneut, ihn dem EDMX hinzuzufügen). Es funktionierte! Vermutlich mochte EF etwas in meinem gespeicherten Prozess nicht. Nachdem ich den Prozess zu EF hinzugefügt hatte, konnte ich den Inhalt des Prozesses in meiner Datenbank auf den gewünschten Wert aktualisieren und es funktioniert. Der Fehler "Datenquelle" wurde behoben.

Verrücktheit

Spyder
quelle
0

Ich habe den gleichen Fehler erhalten und dann meine Verbindungszeichenfolge wie unten aktualisiert.

<add name="EmployeeContext" connectionString="data source=*****;initial catalog=EmployeeDB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />

Versuchen Sie dies, es wird Ihr Problem lösen.

Hasiya
quelle