wake-up-neo.com

In der Konfigurationsdatei der Anwendung wurde keine Verbindungszeichenfolge mit dem Namen 'MyEntities' gefunden

Ich verwende Entity Framework und ASP.NET MVC 4, um eine Anwendung zu erstellen

Meine Lösung ist in zwei Projekte aufgeteilt.

  • Eine Klassenbibliothek, die meine Datenmodelldatei (.edmx) und einige benutzerdefinierte Schnittstellen enthält
  • Das 'Container'-MVC-Projekt, das auf die Klassenbibliothek darüber verweist

Mein Problem ist, dass, wenn ich versuche, die 'MyEntites' DbContext zu verwenden, die folgende Fehlermeldung angezeigt wird:

Es wurde keine Verbindungszeichenfolge mit dem Namen "MyEntities" in .__ gefunden. Anwendungskonfigurationsdatei.

Ich denke, das Problem hat etwas damit zu tun, dass die Verbindungszeichenfolge in der app.config der Klassenbibliothek liegt und nicht im MVC-Projekt.

Hat jemand irgendwelche Vorschläge?

223
jjc99

Versuchen Sie, die Verbindungszeichenfolge in die .config-Datei im MVC-Projekt zu kopieren.

293
Jerry

Sie haben recht, dies geschieht, weil die Klassenbibliothek (in der die .edmx-Datei) nicht Ihr Start-/Hauptprojekt ist.

Sie müssen die Verbindungszeichenfolge in die Hauptprojektkonfigurationsdatei kopieren.

Falls Ihr Start-/Hauptprojekt nicht über eine Konfigurationsdatei verfügt (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.

133
Oren

Stellen Sie sicher, dass Sie Ihr Projekt (mit dem DbContext) als Startup erstellen.

 on the project right click and select

OR

Fügen Sie dem Projekt, das als Start festgelegt ist, Ihre Verbindungszeichenfolge in der Datei app.config (oder web.config) hinzu.

OR

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 versuche es erneut

86
CMS

Sie können die Verbindungszeichenfolge einfach an EntityFramework übergeben und mit Ihrem Leben weitermachen:

public partial class UtilityContext : DbContext
{
    static UtilityContext()
    {
        Database.SetInitializer<UtilityContext>(null);
    }

    public UtilityContext()
        : base("Data Source=SERVER;Initial Catalog=DATABASE;Persist Security Info=True;User ID=USERNAME;Password=PASSWORD;MultipleActiveResultSets=True")
    {
    }

    // DbSet, OnModelCreating, etc...
}
29
Serj Sagan

Wenn Sie mehrere Projekte in der Lösung haben, dann setzen Sie das SetUp-Projekt so, wie es sich für App.config gehört.

8
W92

Wie Sie vermuten, hat dies mit der Verbindungszeichenfolge zu tun, die sich in app.config der Klassenbibliothek befindet.

Kopieren Sie den Eintrag aus der Klasse app.config in die app.config- oder web.config-Datei des Containers 

8
podiluska

kopieren Sie die Verbindungszeichenfolge in die Datei app.config oder web.config im Projekt, die auf "Als Startprojekt festlegen" festgelegt ist. Wenn Sie das Entity-Framework in der Datenschicht verwenden, installieren Sie das Entity-Framework nuget im Hauptprojekt.

6
Ravi Anand

Dies geschieht auch, wenn das Startprojekt geändert auf das eine ist, das nicht die Verbindungszeichenfolge hat.

  1. Klicken Sie mit der rechten Maustaste auf Lösung - klicken Sie auf Eigenschaften 
  2. Wählen Sie unter Allgemeine Eigenschaften Startprojekt aus 
  3. Wählen Sie im rechten Fensterbereich das Projekt aus, für das Die Verbindungszeichenfolgen enthält (in den meisten Fällen handelt es sich um MVC-Projekte.
5
Ravi Ganesan
  1. Fügen Sie eine App.Config-Datei hinzu
  2. Legen Sie das Projekt als Startprojekt fest.
  3. Stellen Sie sicher, dass Sie die Verbindungszeichenfolgen nach dem Abschnitt entityFramework hinzufügen:

    <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.Microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
    
    </configSections>
    
    <connectionStrings>
       <!-- your connection string goes here, after configSection -->
    </connectionString>
    
4
A-Sharabiani

Ja, das ist dumm. Sie können das Kopieren der Verbindungszeichenfolge vermeiden, indem Sie einen Verbindungsgenerator verwenden. VB.Net-Code (wird in der Produktion verwendet, hier jedoch geringfügig geändert, also als ungetestet behandeln, gerne bei Problemen behilflich sein), wenn ich eine serverName-Variable und eine databaseName-Variable habe, übergebe ich sie in eine Methode und lasse die Verbindung generieren für mich:

    Dim EfBuilder As New System.Data.EntityClient.EntityConnectionStringBuilder("metadata=res://*/VMware.VmEf.csdl|res://*/VMware.VmEf.ssdl|res://*/VMware.VmEf.msl;provider=System.Data.SqlClient;provider connection string=""data source=none;initial catalog=none;integrated security=True;multipleactiveresultsets=True;App=EntityFramework""")
   Dim SqlBuilder As New Data.SqlClient.SqlConnectionStringBuilder(EfBuilder.ProviderConnectionString)
                        SqlBuilder.DataSource = serverName
                        SqlBuilder.InitialCatalog = databaseName
                        EfBuilder.ProviderConnectionString = SqlBuilder.ConnectionString
                        Using vmCtx As New VmEfConn(EfBuilder.ConnectionString)
3
Chalky

verwenden Sie mehr als ein Projekt für Ihre Lösung?

Wenn dies der Fall ist, ist die Web-Konfiguration, die Sie überprüfen müssen, diejenige, die in demselben Projekt wie die .edmx-Datei ist

2
Diego

Ich hatte dieses Problem, wenn ich mehrere Proyects verwende, das Startproyect mit web.config und app.config für das EntityFramework-Projekt.

um dieses Problem zu vermeiden, müssen Sie:

  1. Sie benötigen die Verbindungszeichenfolge in der gestarteten * .config-Datei.
  2. Sie müssen das EntityFramework DLL in Ihren Referenzen installiert haben
1
ch2o

Ich habe das gleiche Problem gesehen. Ich habe es versäumt, die Verbindungszeichenfolge für das Startprojekt zu verwenden, da ich den Datenzugriff von einer anderen Schicht aus durchführe. Wenn Sie keine app.config in Ihrem Startprojekt haben, fügen Sie die app.config-Datei hinzu und fügen Sie dieser Konfigurationsdatei dann eine Verbindungszeichenfolge hinzu.

1
Niraj Trivedi

Fügen Sie der MVC Project Web.config-Datei ConnectionString hinzu

1
Mehmedov

Die Verbindungszeichenfolge, die von dem Projekt generiert wird, das die .edmx-Datei enthält, generiert die Verbindungszeichenfolge. Dies scheint ein Überbleibsel der Dateien app.config zu sein, die in das Ausgabeverzeichnis kopiert und von der ausführbaren Datei zum Speichern von Informationen zur Laufzeitkonfiguration referenziert wurden.

Dies führt zu einem Bruch im Webprojekt, da kein automatischer Prozess zum Hinzufügen von zufälligen .config-Informationen zur Datei web.config für das Webprojekt vorhanden ist.

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. 

0
Mike Beeler

Dies kann auch dazu führen, dass im aufrufenden Code nicht genügend DLL-Referenzen angegeben werden. Ein kleiner ungeschickter Hack könnte Ihren Tag retten.

Ich folgte dem DB First-Ansatz und hatte die EDMX-Datei im DAL-Klassenbibliotheksprojekt erstellt. Dies bezog sich auf die BAL-Klassenbibliothek, auf die wiederum von einem WCF-Dienst verwiesen wurde.

Da ich diesen Fehler in der BAL erhalten habe, habe ich die oben beschriebene Methode verwendet, um die Konfigurationsdetails aus der App.config des DAL-Projekts zu kopieren, konnte ihn jedoch nicht beheben. Letztendlich habe ich mit dem Tipp eines Freundes eine Dummy-EDMX-Datei zum WCF-Projekt hinzugefügt (mit relevanter DB-Konnektivität usw.), damit alles Notwendige importiert wurde, und dann habe ich die EDMX-Datei gelöscht und das Problem mit beseitigt ein sauberer Build.

0
sm2mafaz

Ich habe dies dadurch erreicht, dass das Projekt nicht als Startup festgelegt wurde, wie in einer anderen Antwort angegeben. 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 Console an (enthalten Sie nicht die Zeichen '[' oder ']', dies soll Ihnen nur zeigen, dass Sie dies tun müssen den dort befindlichen Text in Ihren Projektnamen ändern):

  1. Enable-Migrations
  2. Add-Migrations -StartupProject [Ihr Projektname, der die Datenkontextklasse enthält]
  3. Update-Database -StartupProject [gleicher Projektname wie oben]

Das sollte es tun.

0
JakeJ

Vergewissern Sie sich, dass Sie die Verbindungszeichenfolge in der ROOT web.config des Startprojekts platziert haben.

Ich weiß, dass ich das Offensichtliche hier ansehe, aber es ist auch mir passiert - obwohl ich bereits die Verbindungszeichenfolge in der Web.Config meines MVC-Projekts HATTE (die .edmx-Datei befand sich in einem anderen Klassenbibliothekprojekt) und ich konnte es nicht Ich weiß nicht, warum ich immer eine Ausnahme bekomme ... __ Lange Geschichte, ich habe die Verbindungszeichenfolge versehentlich in Views\Web.Config kopiert, in einer merkwürdigen Kombination aus Müdigkeit und nicht-Scrollen. bottom-of-the-solution-Explorer-Szenario . Ja, diese Dinge passieren auch erfahrenen Entwicklern :)

0
ShayLivyatan

Regelmäßige Migrationen

Es gibt zwei Optionen - die erste, die hier vorgeschlagen wurde, ist sicherzustellen, dass sich die Verbindungszeichenfolge in der Datei Web.config des Projekts befindet. Wenn Sie mit Verbindungszeichenfolgen aus Azure-Anwendungseinstellungen arbeiten, müssen Sie Ihre Web.config-Werte mit den Azure-Werten überschreiben.

Azure oder automatische Migrationen (programmatisch)

Wenn Sie Migrationen programmgesteuert ausführen, gibt es eine zweite Option, mit der Sie Migrationen mit einer Verbindungszeichenfolge ausführen können, die dynamisch (oder über die Azure-Anwendungseinstellungen) abgerufen wird, ohne sie in der Datei Web.config zu speichern:

Verwenden Sie beim Festlegen der Konfiguration TargetDatabase den Konstruktor DbConnectionInfo, der eine Verbindungszeichenfolge und einen Anbieternamen anstelle des Konstruktors, der nur einen Verbindungsnamen annimmt. Wenn Ihre Verbindungszeichenfolge keinen Anbieternamen enthält und Sie SQL Server/Azure SQL verwenden, verwenden Sie "System.Data.SqlClient".

0
neogeek

Die beste Möglichkeit, dies zu beheben, besteht darin, dieses Projekt (höchstwahrscheinlich eine Klassenbibliothek) vorübergehend auf das Startprojekt zu setzen. Dadurch wird die Paket-Manager-Konsole gezwungen, dieses Projekt als Konfigurationsquelle zu verwenden. Ein Teil des Grunds, warum es auf diese Weise eingerichtet wird, ist das Top-Down-Modell, auf das die econfig-Dateien normalerweise folgen. Als Faustregel gilt, dass das Projekt, das dem Client (MVC-Anwendung beispielsweise) am nächsten liegt, die web.config oder app.config ist, die verwendet wird.

0
gcoleman0828

Fügen Sie in der Stammdatei "web.config" des MVC-Projekts "container", die auf die Klassenbibliothek verweist, eine Verbindungszeichenfolge hinzu:

 <connectionStrings>

  <add name="MyEntities" connectionString="complete connection string here" providerName="System.Data.SqlClient" />

  </connectionStrings>

Wenn Sie "MyEntities" nicht als Verbindungsnamen verwenden möchten, ändern Sie ihn nach Belieben, nehmen Sie jedoch die folgende Änderung in Ihrer MyEntities DbContext-Klasse vor:

MyEntities: DbContext
 {
   public MyEntities():base("Name-Of-connection-string-you wish to connect"){ }
 }

Grund für diesen Fehler ist Folgendes: Wenn wir nicht den Namen der Verbindungszeichenfolge angeben. Oder die Verbindungszeichenfolge in der abgeleiteten Klasse von DbConext (in Ihrem Fall MyEntities), sucht DbContext automatisch nach einer Verbindungszeichenfolge in der root web.config-Datei, deren Name der Name ist wie abgeleiteter Klassenname (in Ihrem Fall My Entities). 

0
Pawan Rai

Dieses Problem tritt auf, wenn Sie Ebenen in Ihrem Projekt verwenden und Entity Frame Work in DataLayer definiert oder installiert haben und versuchen, Ihr Projekt auszuführen

Um dieses Problem zu umgehen, kopieren Sie die Verbindungszeichenfolge aus der Ebene, in der sich die Edmx-Datei befindet, und fügen Sie die Verbindungszeichenfolge in main web.config ein.

0
Debendra Dash

Ich hatte dieses Problem beim Ausführen von MSTest. Ich konnte es nicht ohne die "Noisolation" -Fahne zum Laufen bringen.

Hoffentlich hilft das jemandem. Es hat mich viel Zeit gekostet, das herauszufinden. Alles lief gut von der IDE. Etwas seltsam am Entity Framework in diesem Zusammenhang.

0
Brian Wirt