EF 4.1-Ausnahme "Der Anbieter hat keine ProviderManifestToken-Zeichenfolge zurückgegeben."

88

Ich versuche, ein auf MSDN gefundenes Beispiel zu replizieren. Ich verwende ASP.NET und EF 4.1 (CTP?). Ich habe NuGet verwendet, um das EntityFramework-Paket zu installieren.

Ich erhalte die folgende Fehlermeldung: The provider did not return a ProviderManifestToken string... und die Datenbank wird nie erstellt.

Hier ist meine Verbindungszeichenfolge:

<add name="HospitalContext"
   connectionString=
   "data source=.\SQLExpress;initial catalog=NewTestDB;integrated security=True;"
   providerName="System.Data.SqlClient"/>

Hier ist mein Code:

var pat = new Patient { Name = "Shane123132524356436435234" };
db.Patients.Add(pat);

var labResult = new LabResult { Result = "bad", Patient = pat };

int recordAffected = db.SaveChanges();

Hier ist mein Kontext:

public class HospitalContext : DbContext
{
    static HospitalContext()
    {
        Database.SetInitializer(new HostpitalContextInitializer());
    }

    public DbSet<Patient> Patients { get; set; }
    public DbSet<LabResult> LabResults { get; set; }
}

public class HostpitalContextInitializer :
             DropCreateDatabaseIfModelChanges<HospitalContext>
{
    protected override void Seed(HospitalContext context)
    {
        context.Patients.Add(new Patient { Name = "Fred Peters" });
        context.Patients.Add(new Patient { Name = "John Smith" });
        context.Patients.Add(new Patient { Name = "Karen Fredricks" });
    }
}

Dies ist ein vollständig gepatchtes SQL 2008-System mit VS 2010 SP1.

Bugnuker
quelle
Es scheint, als ob nach dem Hinzufügen von [Schlüssel] zum Modell die Arbeit über dieses Problem hinausgeht. Ich habe immer noch ein anderes Problem, aber das könnte das gelöst haben.
Bugnuker
Es könnte auch sein, dass ich "Intergrated security = true" zu meiner Verbindungszeichenfolge hinzugefügt habe ...
bugnuker
Ich habe die gleiche Ausnahme bei der Arbeit mitSqlServerCe.Entity.dll
Nano Taboada
2
Im Interesse von Dingen, die diese Ausnahme hervorrufen können, verbringe ich 20 Minuten damit, über den Tippfehler im Namen der Verbindungszeichenfolge zu starren, die mit dem Namen des Kontexts übereinstimmen muss.
JustSteve

Antworten:

184

Ich habe diesen Fehler erhalten und einige der früheren Vorschläge ausprobiert. Dann überprüfte ich die innere Ausnahme und bemerkte, dass ich einen einfachen SQL-Anmeldefehler für den Benutzer bekam. Nur noch etwas zu überprüfen.

betrunken
quelle
In meinem Fall war das SQL Server-Passwort abgelaufen
mklein
3
Danke, dass du mich in die richtige Richtung gelenkt hast. Mein SQL Express-Dienst wurde nicht gestartet - duh!
Camainc
Gute alte innere Ausnahme ... ich hatte meinen DB-Namen falsch, als ich EF auf einen neuen Backup-Speicherort zeigte ... lustige Sache, ich habe die InnerEx überprüft und Ihr Kommentar hat mich dazu gebracht, zurück zu gehen und sie erneut zu lesen ... ein dickes Lob!
Andy Danger Gagne
Bei Verwendung von Integrated Security verfügte IIS AppPool nicht über die erforderlichen Rechte.
Vincent Vancalbergh
+1 - (Meine Home-IP wurde geändert) Fehlermeldung: Der vom Login angeforderte Server 'SERVERNAME' kann nicht geöffnet werden. Client mit der IP-Adresse 'MY_OLD_IP' darf nicht auf den Server zugreifen. Verwenden Sie zum Aktivieren des Zugriffs das SQL Azure-Portal oder führen Sie sp_set_firewall_rule in der Master-Datenbank aus, um eine Firewall-Regel für diese IP-Adresse oder diesen Adressbereich zu erstellen. Es kann bis zu fünf Minuten dauern, bis diese Änderung wirksam wird. \ R \ nDie Anmeldung für Benutzer 'MYADMINACCT' fehlgeschlagen. \ R \ nDieser Sitzung wurde die Ablaufverfolgungs-ID 'GUID' zugewiesen. Stellen Sie diese Ablaufverfolgungs-ID dem Kundensupport zur Verfügung, wenn Sie Hilfe benötigen. "}
Dylan Hayes
8

Dies kann manchmal vorkommen, wenn Sie die Verbindungszeichenfolge in der app.config des falschen Projekts in Visual Studio platzieren.

Ich habe dieses Problem beispielsweise im EF 4.1-Projekt (der veröffentlichten Version) + im WCF-Datendienstprojekt festgestellt und festgestellt, dass im Datendienstprojekt, in dem es verwendet wurde, keine Verbindungszeichenfolge angegeben wurde.

Preet Sangha
quelle
Das war meine Lösung. Ich musste die richtige Verbindungszeichenfolge in das Startprojekt einfügen.
MickJuice
5

Ich hatte den gleichen Fehler und tatsächlich war die Anmeldung für den angegebenen Server fehlgeschlagen. Ich habe das Attribut "Integrierte Sicherheit" aus der Konfigurationsverbindungszeichenfolge entfernt und es hat funktioniert.

Rakesh Singh
quelle
Das hat bei mir funktioniert. Jeder andere, der dieses Problem hat, sollte dies versuchen, wenn die anderen Lösungen nicht funktionieren.
Justin
Dieser Fehler trat auf, als der SQL Express-Dienst auf meinem Computer deaktiviert wurde.
John M
4

Ich hatte das gleiche Problem und füge den folgenden Code direkt nach der Instanz meines Kontexts hinzu (Beispiel: Onload)

context.Database.Connection.ConnectionString = @"Data Source=.\SQLExpress;Initial Catalog=Test;Integrated Security=True";
toto123
quelle
4

Ich hatte ein ähnliches Problem mit der MvcMusicStore-App. Ich habe eine Zeile in der Web.config von "Instance = true" in "Instance = false" geändert. Es funktioniert manchmal ohne diese Optimierung, aber ich weiß nicht, was den Unterschied verursacht. Das Lesen dieser http://msdn.microsoft.com/en-us/library/ms254504.aspx hat nicht wirklich geholfen.

xuvion
quelle
Erstaunlich ... das war die richtige Lösung für mich. Ich habe keine Idee warum.
Kees C. Bakker
2

Aus bestimmten Gründen kann EF keine Datenbankverbindung herstellen. Ich hatte den ganzen Tag das gleiche Problem. Schließlich hatte ich folgende Lösung ausprobiert und es funktionierte: a / IIS öffnen (ich verwende IIS 7) b / Erweiterte Einstellungen von Appool öffnen, welche Website verwendet wurde (Beispiel: DefaultAppPool) c / Prozessmodellgruppe anzeigen, Identitätswert ändern zu "Localsystem"

Hoffe es funktioniert mit dir.

Telvin Nguyen
quelle
2

Ich hatte nur das gleiche Problem ...
die Lösung, die für mich funktioniert hat, war:
Führen Sie das Client-Netzwerkkonfigurationstool aus (geben Sie cliconfg in Run ein)
und stellen Sie sicher, dass TCP / IP aktiviert ist.

user1168945
quelle
2

Ich habe es endlich geknackt - nach einer leichten Verfolgungsjagd mit wilden Gänsen, die dachte, es liege an Berechtigungen.

Offenbarung: BENUTZEN SIE SQL PROFILER

(Hinweis: Ich habe kürzlich ein Downgrade von EF6 auf EF5 durchgeführt.)

Mit SQL Profiler fand ich schnell das letzte SQL, das vor dem gemeldeten Fehler ausgeführt wurde:

SELECT TOP (1) 
[Project1].[C1] AS [C1], 
[Project1].[MigrationId] AS [MigrationId], 
[Project1].[Model] AS [Model]
FROM ( SELECT 
    [Extent1].[MigrationId] AS [MigrationId], 
    [Extent1].[Model] AS [Model], 
    1 AS [C1]
    FROM [dbo].[__MigrationHistory] AS [Extent1]
)  AS [Project1]
ORDER BY [Project1].[MigrationId] DESC

Schauen Sie sich das an - etwas, das mit Migrationen zu tun hat. Es schaut hinein__MigrationHistory Tabelle aus - was ich nicht einmal bemerkt hatte, dass es erstellt wurde (ich hatte bereits Migrationen in meinem CSPROJ ausgelöscht) und das gelöscht hat.

Also rufe ich die Zeilen für diese Tabelle auf und sehe, dass sie an eine bestimmte Produktversion (v6) gebunden ist.

Geben Sie hier die Bildbeschreibung ein

Ich habe tatsächlich ein Downgrade von EF6 (das ich ursprünglich nicht installieren wollte) auf EF5 (das besser mit Gerüsten kompatibel ist) herabgestuft, und das, als die Probleme begannen.

Ich vermute, dass die Model (<Binary data>)Spalte nicht abwärtskompatibel ist - daher der The provider did not return a ProviderManifest instanceFehler, da sie nicht dekodiert werden konnte.

Ich hatte nichts zu verlieren und löschte diesen Tisch komplett aus und rannte los Update-Database -Verbose und war dann wieder am Laufen.

Wenn Sie sich in einer fortgeschrittenen Umgebung befinden oder bereits in der Produktion sind, ist das Löschen dieser Tabelle möglicherweise nicht die Lösung, aber auf diese Weise konnte ich sofort wieder arbeiten.

Simon_Weaver
quelle
Am Ende habe ich den __MigrationsHistory-Tisch komplett fallen lassen und mit Add-Migrationund das Gerüst neu aufgebaut Update-Database -Verbose -Force. Hier ist eine Befehlsreferenz encoding.abel.nu/2012/03/ef-migrations-command-reference
Simon_Weaver
Der wichtige Punkt ist, dass dies nicht nur ein Berechtigungsfehler ist
Simon_Weaver
1

Bei der Verwendung von Visual Studio 11 Beta mit EF4.1 und ASP.NET MVC habe ich mir fast die Haare ausgezogen, bis ich gefunden habe

http://connect.microsoft.com/VisualStudio/feedback/details/740623/asp-net-mvc-4-default-connection-string-improperly-escaped

Um mein Problem zu beheben, habe ich Application_Start aufgerufen und geändert

Database.DefaultConnectionFactory = new SqlConnectionFactory ("Datenquelle = (localdb) \ v11.0; Integrierte Sicherheit = True; MultipleActiveResultSets = True");

zu

Database.DefaultConnectionFactory = new SqlConnectionFactory ( @ "Datenquelle = (localdb) \ v11.0; Integrierte Sicherheit = True; MultipleActiveResultSets = True");

GaTechThomas
quelle
Database.DefaultConnectionFactory = new SqlConnectionFactory(@"Data Source=(localdb)\v11.0; Integrated Security=True; MultipleActiveResultSets=True");wurde zu meinem Mainmehod hinzugefügt , jetzt funktioniert es wie ein Zauber! Vielen Dank.
Rotger
1

Dieser Fehler tritt nur auf, wenn die EDMX-Datei geöffnet ist, und verschwindet, sobald die Datei wieder geschlossen wird.

Dieses Zitat von CodePlex hat bei mir funktioniert (Visual Studio 2013 / MVC 5)

Feras
quelle
Arbeitete auch mit mir. Es wurde versucht, die edmx-Datei zu schließen und erneut zu öffnen. Hat funktioniert.
Rohit
1

Eine andere Sache, die Sie berücksichtigen sollten, wenn Sie EF Code First verwenden, ist, dass die Sicherungsdatenbank manchmal nicht automatisch für Ihre DbContext-Klasse erstellt wird. Die Lösung besteht darin, eine eigene Verbindungszeichenfolge hinzuzufügen. Sie können die möglicherweise vorhandene Verbindungszeichenfolge verwenden, um die Benutzer- / Registrierungsdatenbank, die den Simple Membership Provider unterstützt, als Vorlage zu verarbeiten. Schließlich müssen Sie einen Standardkonstruktor für die von Ihnen erstellte DbContext-Klasse hinzufügen:

public ChaletDb():base("ChaletConnection")
    {

    }

Hier wird der Name der Verbindungszeichenfolge, die Sie in Ihre Datei web.config eingegeben haben, verwendet, um den DbContext zum Erstellen der Datenbank anzuweisen. Sehr gelegentlich musste ich die Datenbank manuell erstellen (in SQL Server Management Studio), wodurch sie zum Funktionieren aufgefordert wurde.

John Kelleher
quelle
0

Ich habe mehrere Projekte in einer Lösung und habe jedem Projekt zu unterschiedlichen Zeiten EF hinzugefügt. Auf einigen Maschinen funktionierte es und auf einigen schlug es mit dem oben genannten Fehler fehl. Es dauerte eine Weile, bis ich bemerkte, dass einige der app.config meines Projekts Folgendes hatten:

    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
  <parameters>
    <parameter value="v11.0" />
  </parameters>
</defaultConnectionFactory>

Dies ist in Ordnung, wenn Sie LocalDb verwenden (neues "SQL Express" -ähnliches), aber völlig falsch, wenn Sie diesen bestimmten Server nicht installiert haben und ein reguläres SQL verwenden.

Lösung: Entfernen Sie den obigen Code.

Oleg K.
quelle
0

Dies liegt daran, dass die Verbindung zum SQL Server fehlgeschlagen ist.

Stellen Sie sicher, dass das Benutzerkonto, unter dem Sie den Prozess ausführen, Zugriff auf SQL Server hat.

Wenn Sie den DbContext aus dem übergeordneten Thread generiert haben (z. B. mithilfe der Abhängigkeitsinjektion) und sich dann als ein anderer Benutzer ausgeben, tritt dieser Fehler auf. Die Lösung wäre, den DbContext innerhalb des neuen Threads oder des neuen Identitätswechselkontexts zu generieren.

justcoding121
quelle
0

Ich habe gerade alle Instanzen von Visual Studio geschlossen und meine Lösung erneut geöffnet.

Ich weiß nicht, was wirklich passiert ist, aber ich habe dieselbe Lösung aus zwei verschiedenen lokalen Arbeitsbereichen geöffnet (einer mit meinen lokalen Änderungen, einer mit dem unveränderten Repository-Quellcode). Ich arbeite mit einer Postgres-Datenbank, Entity Framework 6, Visual Studio 2013 und ASP.NET MVC 5.

Alter Pascalou
quelle
0

Ich hatte einen Fehler beim Entity Framework, aber keine der oben genannten Antworten passte in die Lösung, die schließlich funktionierte.

Mein EntityFramework-Code Erste Modelle und DataContext befanden sich in einem von meinem WebAPI-Hauptprojekt getrennten Projekt. Mein Entity Framework-Projekt wurde irgendwo in der Codierungszeile als Startprojekt festgelegt. Daher wurde beim Ausführen einer Migration das Verbindungsproblem "Der Anbieter hat keine ProviderManifestToken-Zeichenfolge zurückgegeben" angezeigt.

Es stellt sich heraus, dass die Verbindungszeichenfolge nicht abgerufen wurde, da sich der ConnectionString zur Datenbank in der Datei Web.config im WebAPI-Hauptprojekt befindet. Durch Festlegen des WebAPI-Projekts als mein Startprojekt konnte ich erfolgreich eine Verbindung herstellen.

Schlafloser Ninja
quelle