2013-03-04 10 views
7

Ich versuche, eine einfache ASP.NET MVC 4 Webanwendung mit DB ersten Migrationen von einem SQL Server (2005) einzurichten. Ich habe die Tabellen in der Datenbank erstellt und Entity Framework verwendet, um die Objekte im Code zu erstellen. Ich kann mit diesen Objekten auf die Daten zugreifen.Der angeforderte .Net Framework Data Provider konnte nicht gefunden werden. (SqlClient)

Die Probleme kommen, wenn ich versuche, die WebSecurity mit WebSecurity.InitializeDatabaseConnection("FLMREntities", "UserProfile", "UserId", "UserName", true); in der Datei Global.asax.cs zu initialisieren. Ich habe versucht, den InitializeSimpleMembershipAttribute-Filter zu verwenden, der mit der Vorlage geliefert wurde, und habe das gleiche Problem. Ich erhalte die Fehlermeldung:

Unable to find the requested .Net Framework Data Provider. It may not be installed. 

Hier ist die relevante Verbindungszeichenfolge:

<add name="FLMREntities" 
    connectionString="metadata=res://*/Models.FLMR.csdl|res://*/Models.FLMR.ssdl|res://*/Models.FLMR.msl; 
        provider=System.Data.SqlClient; 
        provider connection string=&quot;data source=notes.marietta.edu; 
         initial catalog=muskwater; 
         user id=muskwater;password=********; 
         MultipleActiveResultSets=True; 
         App=EntityFramework&quot;" 
    providerName="System.Data.EntityClient" /> 

Auch ich habe die Mitgliedschaft Tabellen in der Datenbank erstellt entsprechen, was die Vorlage erstellt. Wenn ich den letzten Parameter im Initialize-Aufruf auf false ändere (so dass er nicht versucht, die Tabellen automatisch zu erstellen), gibt er zurück, dass er die UserProfile-Tabelle nicht finden kann. Ich habe auch Variationen über die Namen versucht, zum Beispiel [dbo]. [UserProfile].

Alles, was ich brauche, ist ein einfaches Konto-Modell, um Benutzern zu erlauben, sich einzuloggen und bestimmten Benutzern zu erlauben, mehr Inhalt zu sehen.

+0

Haben Sie eine '' vor Ihrer Verbindungszeichenfolge? Um zu verhindern, dass Sie irgendwelche anderen Konfigurationen erben – Basic

+0

Ich habe keine anderen Verbindungszeichenfolgen in diesem Projekt. Ich habe den aus der Vorlage auskommentiert. Würde ich immer noch die '' brauchen und würde das auf der gleichen verschachtelten Ebene wie die obige gehen? – amoscardino

+0

Es ist möglich, dass für jede maschinen-/standortweite Konfiguration Verbindungszeichenfolgen zu Ihrer Anwendung hinzugefügt werden. Einige Frameworks tun es auch. Das '' sollte das erste Element im selben Abschnitt wie Ihre Verbindungszeichenfolge sein (die Reihenfolge wird beibehalten, wenn Konfigurationsabschnitte geladen werden). – Basic

Antwort

1

Dies könnte ein Duplikat von this sein.

Von dem, was ich an dieses Problem erinnere, müssen Sie sicherstellen, dass der sqldata-Anbieter registriert ist. Manchmal gibt es in Ihrer machine.config einen doppelten Eintrag, den Sie löschen müssen. Wenn ich mich richtig erinnere, könnte es einen fehlerhaften Eintrag geben, den Sie entfernen müssen. Werfen Sie einen Blick auf this msdn post, die Info dafür ist etwa auf halber Strecke der Seite.

Der Link zu den anderen SO hat einige Links, die hilfreich sein könnten. Wenn dies nicht als duplizierte Frage markiert wird, kann ich sie auch hier hinzufügen oder was auch immer zu tun ist.

Der Abschnitt Sie suchen, wird so aussieht Ich denke:

<system.data> 
    <DbProviderFactories> 
    <add name="SqlClient Data Provider" 
    invariant="System.Data.SqlClient" 
    description=".Net Framework Data Provider for SqlServer" 
    type="System.Data.SqlClient.SqlClientFactory, System.Data, 
    Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
    /> 
    </DbProviderFactories> 
</system.data> 

Von den Informationen, die Sie in den Kommentaren zur Verfügung gestellt haben, scheint es, dass dies in Ihrem machine.config fehlt. Wenn ich mich nicht irre (möglich), bedeutet dies, dass der SQL-Provider nicht auf Ihrem Computer registriert ist. Sie müssen den obigen Abschnitt zu Ihrer web.config hinzufügen. Sie müssen außerdem sicherstellen, dass System.Data.SqlClient in Ihrem Projekt referenziert wird.

Wenn dies auf Ihrem Zielcomputer nicht installiert ist, müssen Sie mehr Arbeit erledigen und installieren. Ich wünschte, ich könnte dir damit mehr helfen, aber als ich das tat, war es für SqlServerCE, also sind die Dateien, die ich benutzte, sehr unterschiedlich.

Viel Glück!

EDIT: Eine wichtige Information, ist die Version muss die Datei, die Sie verwenden, übereinstimmen. in type = "blabh.blaha.blah..Version = 2.0.0.0, blah blah", das muss die Version der Datei sein, die du verwendest, also klicke mit der rechten Maustaste auf deine Datei und erhalte die Dateiversion. Wenn es fehlschlägt, versuchen Sie Variationen der Version. Ich glaube, meine Datei war 2.0.0.1, aber Version = 2.0 hat funktioniert, als ich es gemacht habe. Probieren Sie einfach ein paar verschiedene Versionen basierend auf Ihrer Versionsnummer aus (zB 2.0, 2.0.0, 2.0.0.1).

+0

Die Antwort in dieser Frage erklärt wirklich nicht, wie man das Problem repariert. Ich habe die machine.config Datei gefunden und es gibt nur DbProviderFactory Einträge für SqlServerCe. Muss ich einen Eintrag für SqlClient hinzufügen? Wird es nur so aussehen, wie du es gepostet hast? – amoscardino

+0

Ich würde die machine.config nicht ändern, wenn Sie nicht wissen, was Sie tun. Lassen Sie mich sehen, ob ich die Ressourcen, die ich verwendet habe, wenn ich dieses Problem hatte, finden kann, damit Sie eine bessere Idee haben. –

+0

Auch, zur Info, als ich genau den gleichen Fehler hatte wie du (es war zur Laufzeit), war das die Lösung. Ich musste sicherstellen, dass die richtigen Dateien bereitgestellt wurden und ich den Abschnitt, den ich aufgelistet habe, zu meiner web.config hinzufügen musste. –

0

wollte nur hier, dass ich dieses Problem hatte, indem ich auf meine machine.config für die gezielte .NET-Version, die ich lief von ...innerhalb der Struktur:

sicherzustellen, dass Ihre gezielten Datenanbieter korrekt innerhalb dort eine nur pro Anbieter eingegeben werden (ich habe Duplikate verursachen Probleme gesehen), sowie darauf, dass es gültige XML ist, und Sie haben nur einen DBProviderFactories-Eintrag. In meinem Fall hatte ich einen Eintrag nach dem ersten Eintrag (im Wesentlichen zwei Einträge, einen mit meinen Providern, einen leeren), und der leere war, verursacht alle Probleme.

Hoffnung hilft dies jemand mit dem gleichen Problem :)

4

Ich hatte ein ähnliches Problem, was ich getan habe: ich die Standardverbindung modifiziert. Ich hatte bereits eine Verbindungszeichenfolge für das edmx Modell, das so aussah:

<add name="ChemicalReporterEntities" connectionString="metadata=res://*/ChemicalDB.csdl|res://*/ChemicalDB.ssdl|res://*/ChemicalDB.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\SQLExpress;initial catalog=ChemicalReporter;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 

Aber ich kann es mit dem SimpleMemebrship Provider nicht verwendet. So in Visual Studio öffnete ich den Server-Explorer> Datenverbindungen, ich meine Verbindung ausgewählt, rechts klicken, Eigenschaften und ich kopiert die Verbindungszeichenfolge von dort und es defaultConnection eingefügt:

<add name="DefaultConnection" connectionString="Data Source=.\SQLExpress;Initial Catalog=ChemicalReporter;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFramework" providerName="System.Data.SqlClient" /> 

Danach habe ich WebSecurity.InitializeDatabaseConnection geändert um die DefaultConnection zu verwenden.

WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", true); 
Verwandte Themen