Ich habe eine .mdf
für die Verbindung zu einer Datenbank
und einem EntityClient
verwendet. Jetzt möchte ich die Verbindungszeichenfolge so ändern, dass es keine .mdf
-Datei gibt.
Ist der folgende connectionString
korrekt?
<connectionStrings>
<!--<add name="conString" connectionString="metadata=res://*/conString.csdl|res://*/conString.ssdl|res://*/conString.msl;provider=System.Data.SqlClient;provider connection string="Data Source=.\SQL2008;AttachDbFilename=|DataDirectory|\NData.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />-->
<add name="conString" connectionString="metadata=res://*/conString.csdl|res://*/conString.ssdl|res://*/conString.msl;provider=System.Data.SqlClient;provider connection string="Data Source=.\SQL2008;Initial Catalog=NData;Integrated Security=True;Connect Timeout=30;User Instance=True;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
Denn ich bekomme immer die Fehlermeldung:
Der zugrundeliegende Anbieter ist beim Öffnen fehlgeschlagen
Ich hatte diesen Fehler und habe ein paar Lösungen gefunden:
Wenn ich mir Ihre Verbindungszeichenfolge ansehe, sieht sie gültig aus. Ich habe diesen Blogbeitrag gefunden, das Problem hier ist, dass sie integrierte Sicherheit verwenden. Wenn Sie mit IIS arbeiten, benötigt Ihr IIS-Benutzer Zugriff auf die Datenbank.
Wenn Sie Entity Framework mit Transaktionen verwenden, öffnet und schließt Entity Framework bei jedem Datenbankaufruf automatisch eine Verbindung. Wenn Sie also Transaktionen verwenden, versuchen Sie, eine Transaktion auf mehrere Verbindungen zu verteilen. Dies führt zu MSDTC.
(Für weitere Informationen siehe diese Referenz)
Die Änderung meines Codes in den folgenden hat das Problem behoben:
using (DatabaseEntities context = new DatabaseEntities())
{
context.Connection.Open();
// the rest
}
Die Option context.Connection.Open()
half nicht, mein Problem zu lösen, also habe ich versucht, "Allow Remote Clients" in der DTC-Konfiguration zu aktivieren, kein Fehler mehr.
In Windows 7 können Sie die DTC-Konfiguration öffnen, indem Sie dcomcnfg, Component Services -> Computers -> My Computer -> Distributed Transaction Coordinator -> Right click to Local DTC -> Security ausführen.
Ich fand heraus, dass das Problem darin lag, dass ich den Serverpfad in der Verbindungszeichenfolge in einer dieser Varianten hatte:
SERVER\SQLEXPRESS
SERVER
Wenn ich es wirklich hätte tun sollen:
.\SQLEXPRESS
Aus irgendeinem Grund bekam ich die Fehlermeldung, wenn es Schwierigkeiten hatte, die Instanz von SQL zu finden.