SimpleMembershipInitializer wird nicht initialisiert

8

Ich habe Schwierigkeiten, ein einfaches Mitgliedschaftsszenario in meinem EntityFramework / MVC4 / DatabaseFirst-Projekt zu erhalten. Ich habe viele Beispiele für die Arbeit mit Code zuerst, aber nichts für DB zuerst gefunden.

Das Problem, auf das ich stoße, ist, dass die InitializeDatabaseConnection einen Fehler erzeugt ("Der angeforderte .Net Framework Data Provider kann nicht gefunden werden. Er ist möglicherweise nicht installiert.") Der Code sieht so aus:

%Vor%

Ich bin mir nicht sicher, welcher DataProvider fehlschlägt. Wenn ich versuche, den InitializeDatabaseConnection-Aufruf zu "verfolgen", wird der Fehler sofort ausgelöst.

Was vermisse ich?

Info:
DALEntities ist der Name der connectionString, die der Rest von EF verwendet. Der folgende Code funktioniert gut ....

%Vor%

Meine Verbindungszeichenfolgen aus der web.config:

%Vor%

Dieser Beitrag scheint die gleiche Frage zu stellen (aber im Kontext des ersten Modells), aber es gibt noch keine Lösung: SimpleMembership mit EF-Modell zuerst verwenden

Außerdem sehe ich, dass es eine Überlastung für WebSecurity.InitializeDatabaseConnection() mit dem Hilfetext gibt: Initializes the membership system ((blah blah <snip> ProviderName: the name of the ADO.NET data provider. If you want to use Microsoft SQL Server, the WebMatrix.WebData.WebSecurity.InitializeDatabaseConnection(String, String, String, String, Boolean) overload is recommended . Ich möchte eine Verbindung mit einem MSSQL-Server herstellen ... wird dies erforderlich sein?

    
reidLinden 15.10.2012, 19:30
quelle

2 Antworten

7

Der Anbieter, der Ihnen Probleme bereitet, ist derjenige, der in Ihrer Verbindungszeichenfolge angegeben ist, nämlich System.Data.EntityClient. Ich vermute, das Problem liegt darin, dass Ihr Projekt Datenbank-first ist, während die einfache Mitgliedschaft Code-first verwendet. Ich glaube nicht, dass Sie diese Ansätze in einer einzigen Datenbank kombinieren können. Versuchen Sie es an die Stelle zurückzusetzen, an der die DefaultConnection für IntializeDatabaseConnection verwendet wird. In Ihrer web.config sollte eine DefaultConnection vorhanden sein, die vom MVC4-Scaffolding generiert wurde. Diese Verbindungszeichenfolge verwendet normalerweise System.Data.SqlClient als Provider.

Wenn Sie die einfache Mitgliedschaft in der Datenbank beibehalten möchten, die zum Speichern von Domäneninformationen verwendet wird (d. h. DALEntities), müssen Sie die Methode für die Verwendung von EF in der Domäne ändern, um zuerst zu codieren. Wenn Sie Ihre Projektdatenbank behalten möchten, müssen Sie zunächst ein eigenes Mitgliedschaftsschema in der Datenbank erstellen und benutzerdefinierte Mitglieds- und Rollenanbieter entwickeln . Dies ist wahrscheinlich der beste Ansatz, wenn Sie wirklich versuchen, Benutzerinformationen in Ihr Domänenmodell zu integrieren.

    
Kevin Junghans 15.10.2012, 20:15
quelle
1

Halten Sie aus Gründen der Einfachheit und Klarheit zwei Verbindungszeichenfolgen auf dieselbe Datenbank. Eine für EF (egal ob Code zuerst oder Daten zuerst) und eine für Ihr WebSecurity Zeug. (Wie Chad und Erik gesagt haben)

%Vor%

Beachten Sie, dass die Anbieter unterschiedlich sind: EF verwendet System.data.EntityClient und nicht EF verwendet System.Data.SqlClient.

    
Mike 03.08.2014 20:08
quelle