it-swarm.com.de

Entity Framework: Der Kontext wird im Code First-Modus mit Code verwendet, der aus einer EDMX-Datei generiert wurde

Ich entwickle eine WPF-Anwendung mit dem ersten Ansatz der EF 6-Datenbank. Ich habe 1 Projekt in meinen Lösungen. Wenn ich mein Projekt ausführe, wird dieser Fehler immer angezeigt.

Der Kontext wird im Code First-Modus mit Code verwendet, der aus einer EDMX-Datei für die Database First- oder Model First-Entwicklung generiert wurde. Das wird nicht richtig funktionieren. Um dieses Problem zu beheben, entfernen Sie nicht die Codezeile, die diese Ausnahme auslöst. Wenn Sie Database First oder Model First verwenden möchten, stellen Sie sicher, dass die Entity Framework-Verbindungszeichenfolge in der app.config oder web.config des Startprojekts enthalten ist. Wenn Sie Ihre eigene DbConnection erstellen, stellen Sie sicher, dass es sich um eine EntityConnection und nicht um einen anderen DbConnection-Typ handelt und dass Sie sie an einen der DbContext-Basis-Konstruktoren übergeben, die eine DbConnection verwenden. Weitere Informationen zu Code First, Database First und Model First finden Sie in der Entity Framework-Dokumentation hier: http://go.Microsoft.com/fwlink/?LinkId=394715

13
Munjani375

Mein Fehler war die Verwendung einer Standardverbindungszeichenfolge im Konstruktor

(Server = test\test; Database = DB; User Id = test_user;Password = test), 

entity Framework benötigt jedoch ein anderes Format 

(metadata=res://*/DBModel.csdl|res://*/DBModel.ssdl|res://*/DBModel.msl;provider=System.Data.SqlClient;provider connection string="data source=test\test;initial catalog=DB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework""" providerName = ""System.Data.EntityClient)

Bearbeiten: Geänderter Code, der als Code formatiert werden soll, damit er einfacher zu lesen ist.

13
Stepan Tripal

EF macht Annahmen basierend auf dem Vorhandensein oder Nichtvorhandensein eines Metadatenabschnitts in der Verbindungszeichenfolge. Wenn Sie diesen Fehler erhalten, können Sie den Metadatenabschnitt zur Verbindungszeichenfolge in Ihrer Konfigurationsdatei hinzufügen.

Z.B. Wenn Ihre Verbindungszeichenfolge so aussieht:

    <add name="MyModel" connectionString="data source=SERVER\INSTANCE;initial catalog=MyModel;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />

Stellen Sie metadata=res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl; so vor, dass es so aussieht:

<add name="MyModel" connectionString="metadata=res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl;data source=SERVER\INSTANCE;initial catalog=MyModel;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
9
Daniel de Zwaan

Eine Sache, die Sie tun können, ist ... (wenn die Datenbank zuerst ist)

Öffnen Sie das .edmx [Diagramm] -> Rechtsklick -> "Modell aus Datenbank aktualisieren".

Und sehen Sie, ob die Registerkarten "Hinzufügen", "Aktualisieren" und "Löschen" angezeigt werden.

Wenn nicht ... wahrscheinlich ist Ihre Verbindung unterbrochen und der Dialog für VS erstellt eine neue Verbindungszeichenfolge. =)

3
Rafael Ribeiro

Sehr spät, aber immer noch hilfreich. Ich steckte in einem ähnlichen Problem fest. Hat eine Frage zu SO gepostet und konnte eine Lösung finden. Sie können auf Verbindungszeichenfolge-Fehler in C # Web Api verweisen. Meine Situation war, dass ich zwei Verbindungszeichenfolgen in web.config hatte (Sie werden wissen, warum, wenn Sie auf den Link gehen). Beim Kommentieren einer Zeichenfolge wurde der Fehler ausgelöst, den Sie beim Kommentieren der anderen erhalten haben. Der folgende Fehler wurde angezeigt:

Beim Versuch, einen Controller des Typs 'AccountController' zu erstellen, ist ein Fehler aufgetreten. Stellen Sie sicher, dass der Controller über einen öffentlichen Parameter ohne Parameter verfügt.

was ich getan habe war: Ich benannte meine erste Verbindungszeichenfolge als DefaultConnection und im ApplicationDbContext-Klassenkonstruktor gab ich diese DefaultConnection an. Mein AccountController verwendet nun diese Verbindungszeichenfolge und alle anderen Controller verwenden die zweite Verbindungszeichenfolge. Das hat mein Problem gelöst.

1
Harry .Naeem

Sie sollten die generierte Verbindungszeichenfolge nicht verwenden. Jetzt haben Sie alle Metadatendateien in Ihrer Lösung. Verwenden Sie stattdessen im Abschnitt connection string von app.config

"data source=localhost\sqlexpress; initial catalog=sample; integrated security=True;MultipleActiveResultSets=True;"
1
Mozgovoy Artem

Ich habe zwei Projekte:

Eine ist für die generierte EDMX-Datei und alle zugehörigen Modelle.

Das andere ist das ASP.NET MVC-Web. 

Dieses Problem ist aufgetreten, da die Verbindungszeichenfolge, die ich im ASP.NET MVC-Webprojekt verwende, die normale Zeichenfolge ist, die ich mit der ADO.NET-Verbindung verwende. Was ich getan habe, ist folgendes:

  • Öffnen Sie die app.config in Ihren EDMX-Projektdateien. 

  • Kopieren Sie die Verbindungszeichenfolge.

  • Fügen Sie es in das WEB-Projekt ein, da dieses beim Start von Der Anwendung verwendet wird.

0
Willy David Jr

Ich war auch genau mit dieser Botschaft konfrontiert, arbeitete aber mit einem Web-MVC-Projekt. Diese Nachricht wird ausgelöst, wenn ich versuche, den Controller automatisch aus dem importierten Modell zu generieren. Es scheint, dass es nicht funktioniert, weil "das aus einer EDMX-Datei generiert wurde".

Die gute Nachricht ist, dass es funktioniert, wenn ich das Modell basierend auf "Code First" anstelle von "EF Designer" generiere. Die schlechte Nachricht ist, dass ich den EF Designer nicht verwenden kann, wenn die automatische Controller-Generierung funktionieren soll. Es spielt keine Rolle, auf welche Weise Sie Ihr Modell generieren. Sobald das Modell generiert ist, verwenden Sie es auf dieselbe Weise.

Versucht, alle emdx-Objekte aus Ihrem Projekt zu entfernen und das Modell basierend auf Code First anstelle von EF Designer neu zu erstellen. Arbeitete für mich!

0
danilocgsilva