Ich verwende Entity Framework und ASP.NET MVC 4, um eine Anwendung zu erstellen
Meine Lösung ist in zwei Projekte unterteilt.
- Eine Klassenbibliothek, die meine Datenmodelldatei (.edmx) und einige benutzerdefinierte Schnittstellen enthält
- Das 'Container'-MVC-Projekt, das auf die obige Klassenbibliothek verweist
Mein Problem ist, dass beim Versuch, den DbContext ' MyEntites ' zu verwenden , der folgende Fehler angezeigt wird:
In der Anwendungskonfigurationsdatei wurde keine Verbindungszeichenfolge mit dem Namen "MyEntities" gefunden.
Ich denke, das Problem hat etwas damit zu tun, dass die Verbindungszeichenfolge in der app.config der Klassenbibliothek und nicht im MVC-Projekt liegt.
Hat jemand irgendwelche Vorschläge?
PM> Update-Database -Verbose Using StartUp project 'xxxxx.Web.Home'. Using NuGet project 'xxxxx.Web.Home.Dal'. Specify the '-Verbose' flag to view the SQL statements being applied to the target database. Target database is: 'MovieDatabase-0.0.2' (DataSource: (LocalDb)\v11.0, Provider: System.Data.SqlClient, Origin: Configuration).
Antworten:
Versuchen Sie, die Verbindungszeichenfolge in die .config-Datei im MVC-Projekt zu kopieren.
quelle
Sie haben Recht, dies geschieht, weil die Klassenbibliothek (in der sich die .edmx-Datei befindet) nicht Ihr Start- / Hauptprojekt ist.
Sie müssen die Verbindungszeichenfolge in die Hauptprojektkonfigurationsdatei kopieren.
Wenn Ihr Start- / Hauptprojekt keine Konfigurationsdatei hat (wie in meinem Konsolenanwendungsfall), fügen Sie einfach eine hinzu (Startprojekt - Neues Element hinzufügen -> Anwendungskonfigurationsdatei).
Weitere relevante Informationen finden Sie hier: MetadataException: Die angegebene Metadatenressource kann nicht geladen werden
quelle
Stellen Sie sicher, dass Sie Ihr Projekt (mit dem DbContext) als Start erstellen
ODER
Fügen Sie dem Projekt, das als Start festgelegt ist, Ihre Verbindungszeichenfolge in der app.config (oder web.config) hinzu.
ODER
Rufen Sie den Befehl so auf
Update-Database -Script -ProjectName '<project name>' -StartupProjectName '<project name>' -ConnectionString 'data source=.;initial catalog=<db name>;integrated security=True;MultipleActiveResultSets=True' -ConnectionProviderName 'System.Data.SqlClient'
Dann versuchen Sie es erneut
quelle
Set as Startup Project
- wie im obigen Screenshot gezeigt. (Auch wenn Sie F5Sie könnten einfach die Verbindungszeichenfolge an übergeben
EntityFramework
und mit Ihrem Leben weitermachen:quelle
Wie Sie vermuten, hat dies damit zu tun, dass sich die Verbindungszeichenfolge in app.config der Klassenbibliothek befindet.
Kopieren Sie den Eintrag aus der Klasse app.config in den Container
app.config
oder dieweb.config
Dateiquelle
Wenn Sie mehrere Projekte in Lösung haben, setzen Sie das Projekt als gestartet, wo Sie Ihre Wahrheit App.config haben.
quelle
Kopieren Sie die Verbindungszeichenfolge in eine Datei
app.config
oder eineweb.config
Datei in dem Projekt, das auf "AlsStartUp
Projekt festlegen" festgelegt wurde. Wenn Sie ein Entity-Framework in einem Datenschichtprojekt verwenden, installieren Sie bitte das Entity-Framework-Nuget im Hauptprojekt.quelle
Es kommt auch vor, wenn das Startprojekt wird geändert , um die eine, die nicht der Fall ist , die haben Verbindungszeichenfolgen .
quelle
Stellen Sie sicher, dass Sie die Verbindungszeichenfolgen nach dem
entityFramework
Abschnitt hinzufügen :quelle
Ja, es ist albern. Sie können das Kopieren der Verbindungszeichenfolge mithilfe eines Verbindungsgenerators vermeiden. VB.Net-Code (in der Produktion verwendet, hier jedoch geringfügig geändert, daher als ungetestet behandeln und gerne bei Problemen behilflich sein): Wenn ich eine serverName-Variable oder eine databaseName-Variable habe, übergebe ich sie an eine Methode und lasse sie die Verbindung generieren für mich:
quelle
Verwenden Sie mehr als ein Projekt für Ihre Lösung?
Wenn dies der Fall ist, müssen Sie die Webkonfiguration überprüfen, die sich im selben Projekt wie die .edmx-Datei befindet
quelle
Fügen Sie ConnectionString zur MVC Project Web.config-Datei hinzu
quelle
Ich hatte dieses Problem, wenn ich mehrere Projekte verwende, das Startprojekt mit web.config und app.config für das EntityFramework-Projekt.
Um dieses Problem zu vermeiden, müssen Sie:
quelle
Ich habe das gleiche Problem konfrontiert. Ich habe die Verbindungszeichenfolge nicht in das Startprojekt eingefügt, da ich einen Datenzugriffsvorgang von einer anderen Ebene aus durchführe. Wenn Sie in Ihrem Startprojekt keine app.config haben, fügen Sie die Datei app.config hinzu und fügen Sie dieser Konfigurationsdatei eine Verbindungszeichenfolge hinzu.
quelle
Ich habe dies dadurch erreicht, dass das Projekt nicht als Start festgelegt wurde, wie aus einer anderen Antwort hervorgeht. Mein Beitrag dazu - Wenn Sie Add-Migrations und Update-Database ausführen, geben Sie das Startprojekt als Teil des Befehls in der Nuget Package Manager-Konsole an (enthalten Sie nicht die Zeichen '[' oder ']', um Ihnen nur zu zeigen, dass Sie es sind müssen den dort befindlichen Text in Ihren Projektnamen ändern):
Das sollte es tun.
quelle
Dies liegt daran, dass Ihre Kontextklasse von DbContext geerbt wird. Ich denke dein ctor ist so:
name=...
sollte in den Namen Ihres connectionString geändert werdenquelle
Die Verbindungszeichenfolge, die von dem Projekt generiert wird, das die .edmx-Datei enthält, generiert die Verbindungszeichenfolge. Dies scheint ein Überbleibsel aus den Dateien der Datei app.config zu sein, die in das Ausgabeverzeichnis kopiert und von der ausführbaren Datei zum Speichern von Laufzeitkonfigurationsinformationen referenziert wurden.
Dies unterbricht das Webprojekt, da es keinen automatischen Prozess zum Hinzufügen zufälliger .config-Informationen zur web.config-Datei für das Webprojekt gibt.
Am einfachsten ist es, die Verbindungszeichenfolge aus der Konfigurationsdatei in den Verbindungsabschnitt der Datei web.config zu kopieren und den Inhalt der Konfigurationsdatei zu ignorieren.
quelle
Der beste Weg, dies zu beheben, besteht darin, das Projekt (höchstwahrscheinlich eine Klassenbibliothek) vorübergehend auf das Startprojekt zu setzen. Dadurch wird die Paketmanagerkonsole gezwungen, dieses Projekt als Konfigurationsquelle zu verwenden. Ein Grund für die Einrichtung auf diese Weise ist das Top-Down-Modell, dem die Econfig-Dateien normalerweise folgen. Als Faustregel gilt, dass das Projekt, das dem Client am nächsten liegt (z. B. MVC-Anwendung), die web.config oder app.config ist, die verwendet werden.
quelle
Stellen Sie sicher, dass Sie die Verbindungszeichenfolge in der ROOT web.config des Startprojekts platziert haben.
Ich weiß, dass ich hier das Offensichtliche sage, aber es ist mir auch passiert - obwohl ich die Verbindungszeichenfolge bereits in der Web.Config meines MVC-Projekts hatte (die .edmx-Datei wurde in einem anderen Klassenbibliotheksprojekt abgelegt) und ich konnte es nicht Ich finde nicht heraus, warum ich immer wieder eine Ausnahme bekomme ... Kurz gesagt, ich habe die Verbindungszeichenfolge versehentlich in die Ansicht \ Web.Config kopiert, in einer seltsamen Kombination aus Müdigkeit und nicht nach unten scrollen -das-Lösungs-Explorer-Szenario. Ja, diese Dinge passieren auch erfahrenen Entwicklern :)
quelle
Dieses Problem tritt auf, wenn Sie Ebenen in Ihrem Projekt verwenden und Entity Frame Work in DataLayer definieren oder installieren und versuchen, Ihr Projekt auszuführen
Um dieses Problem zu beheben, kopieren Sie die Verbindungszeichenfolge von der Ebene, auf der sich die Edmx-Datei befindet, und fügen Sie die Verbindungszeichenfolge in die Datei web.config ein.
quelle
Fügen Sie der Stammdatei web.config des MVC-Projekts 'container' eine Verbindungszeichenfolge hinzu, die wie folgt auf die Klassenbibliothek verweist:
Wenn Sie "MyEntities" nicht als Verbindungsnamen verwenden möchten, ändern Sie ihn wie gewünscht, nehmen Sie jedoch die folgende Änderung in Ihrer MyEntities DbContext-Klasse vor:
Der Grund für diesen Fehler ist: Wenn wir den Namen der Verbindungszeichenfolge oder der Verbindungszeichenfolge in der abgeleiteten Klasse von DbConext nicht angeben (in Ihrem Fall MyEntities), sucht DbContext automatisch nach einer Verbindungszeichenfolge in der Stammdatei web.config, deren Name lautet Entspricht dem abgeleiteten Klassennamen (in Ihrem Fall "Meine Entitäten").
quelle
Ich hatte dieses Problem beim Ausführen von MSTest. Ohne die Flagge "Noisolation" könnte ich es nicht zum Laufen bringen.
Hoffentlich hilft das jemandem. Hat mich viel Zeit gekostet, um das herauszufinden. Von der IDE lief alles gut. Etwas Seltsames am Entity Framework in diesem Zusammenhang.
quelle
Regelmäßige Migrationen
Es gibt zwei Möglichkeiten: Die erste, die hier vorgeschlagen wird, besteht darin, sicherzustellen, dass sich die Verbindungszeichenfolge in der Datei Web.config des Projekts befindet. Wenn Sie mit Verbindungszeichenfolgen aus den Azure-Anwendungseinstellungen arbeiten, bedeutet dies, dass Sie Ihre Web.config-Werte mit den Azure-Werten überschreiben.
Azure oder automatische Migrationen (programmatisch)
Wenn Sie Migrationen programmgesteuert ausführen, steht eine zweite Option zur Verfügung, mit der Sie Migrationen mithilfe einer Verbindungszeichenfolge ausführen können, die dynamisch (oder über Azure-Anwendungseinstellungen) abgerufen wird, ohne sie in Web.config zu speichern:
Verwenden Sie beim Festlegen der TargetDatabase der Konfiguration den Konstruktor DbConnectionInfo , der eine Verbindungszeichenfolge und einen Anbieternamen verwendet, anstelle des Konstruktors, der nur einen Verbindungsnamen verwendet. Wenn Ihre Verbindungszeichenfolge keinen Anbieternamen hat und Sie SQL Server / Azure SQL verwenden, verwenden Sie "System.Data.SqlClient".
quelle
Dies kann auch dazu führen, dass im aufrufenden Code nicht genügend DLL-Referenzen referenziert werden. Ein kleiner ungeschickter Hack könnte Ihren Tag retten.
Ich verfolgte den DB First-Ansatz und hatte die EDMX-Datei im DAL-Klassenbibliotheksprojekt erstellt. Diese bezog sich auf die BAL-Klassenbibliothek, auf die wiederum von einem WCF-Dienst verwiesen wurde.
Da ich diesen Fehler in der BAL bekam, hatte ich die oben erwähnte Methode versucht, um die Konfigurationsdetails aus der App.config des DAL-Projekts zu kopieren, aber nicht gelöst. Letztendlich habe ich mit dem Tipp eines Freundes dem WCF-Projekt eine Dummy-EDMX-Datei hinzugefügt (mit relevanter DB-Konnektivität usw.), also alles Notwendige importiert und dann einfach die EDMX-Datei gelöscht und das Problem mit beseitigt ein sauberer Build.
quelle
Es gibt einen Kommentar zur Top-Antwort von @RyanMann, der Folgendes vorschlägt:
Dies ist ein fantastischer Vorschlag!
Es funktioniert auch, um Verbindungszeichenfolgen zwischen App.config- und Web.config-Dateien freizugeben!
Wer diesem Vorschlag folgen möchte, sollte sich diese SO-Antwort ansehen . Es enthält eine wirklich großartige Schritt-für-Schritt-Anleitung zum Teilen von Verbindungszeichenfolgen zwischen mehreren Projekten in einer Lösung.
Die einzige Einschränkung besteht darin, dass
configSource
sie im selben Verzeichnis oder in einem Unterverzeichnis vorhanden sein muss. Der obige Link erklärt, wie Sie "Als Link hinzufügen" verwenden, um dies zu umgehen.quelle
Ich hatte diesen Fehler beim Versuch, EF in einem AutoCAD-Plugin zu verwenden. CAD-Plugins erhalten die Verbindungszeichenfolge aus der Datei acad.exe.config. Fügen Sie die Verbindungszeichenfolge wie oben erwähnt zur acad-Konfigurationsdatei hinzu, und es funktioniert.
Der Kredit geht an Norman.Yuan von ADN.Network.
quelle
Wenn Sie ein MVVM-Modell verwenden, versuchen Sie, die Verbindungszeichenfolgen in alle Teile Ihres Projekts zu kopieren.
Wenn Ihre Lösung beispielsweise zwei Projekte enthält, das Klassenbibliotheksprojekt und das wpf-Projekt, müssen Sie die Verbindungszeichenfolgen des Backend-Projekts (Bibliotheksklasse porject) kopieren und eine Kopie in die App.config-Datei des wpf-Projekts einfügen.
Hoffe es ist hilfreich für dich :)
quelle
Fügen Sie Connectoinstrnig in die Datei web.config ein
quelle