Entity Framework - redundante Verbindungszeichenfolge

8

Ich verwende Entity Framework 4 in meinem Projekt. Das Framework hat eine eigene Verbindungszeichenfolge erstellt, daher sieht meine Abschnittsdatei web.config connectionStrings folgendermaßen aus:

%Vor%

Die erste Verbindungszeichenfolge namens ApplicationServices ist meine ursprüngliche. Die zweite, namens VNKEntities , wurde beim Generieren des Modells erstellt.

Als ich die generierte Datei *. edmx überprüft habe, habe ich festgestellt, dass dieses Modell auf seine Verbindungszeichenfolge verweist, die unten gezeigt wird:

%Vor%

Meine Frage ist, wie kann ich die Verbindungszeichenfolge VNKEntities loswerden und nur ApplicationServices belassen, auf die ich von meinem Modell verweisen werde? Ich möchte nur eine Verbindungszeichenfolge zur Datenbank haben, weil ich nur eine Datenbank verwende (den Konstruktorparameter von name=VNKEntities zu name=ApplicationServices ersetzend funktioniert nicht).

Grüße

    
jwaliszko 23.09.2010, 11:15
quelle

4 Antworten

3
  1. Erstellen Sie DbConnection manuell aus der normalen Verbindungszeichenfolge
  2. Erstellen Sie manuell MetadataWorkspace -Objekt.
  3. Erstellen Sie EntityConnection mit this ctor .
  4. Übergeben Sie die Entitätsverbindung an den ObjectContext-Konstruktor.
gandjustas 23.09.2010, 11:29
quelle
3

Obwohl Sie die Verbindung im Code erstellen können, wie @gandjustas (+1) hervorhebt, können Sie nicht auf eine Verbindungszeichenfolge oder EntityConnection verzichten.

Dies liegt daran, dass nicht wirklich redundant ist . Ja, der Datenbankverbindungsteil ist redundant und @gandjustas hat Ihnen gezeigt, wie Sie diese Redundanz entfernen können. Die Verbindungszeichenfolge des Entitätsrahmens enthält jedoch auch Informationen zu Ihrem Modell, das nirgendwo in der Verbindungszeichenfolge gefunden wird, die Sie behalten möchten. Diese Modellinformation muss von irgendwo kommen. Wenn Sie die Verbindungszeichenfolge des Entitätsframeworks eliminieren und den Parameterlistenkonstruktor für ObjectContext verwenden würden, hätten Sie alle Referenzen auf das Modell eliminiert.

    
Craig Stuntz 23.09.2010 12:36
quelle
1

Ich hatte das gleiche Problem. Ich habe es folgendermaßen gelöst:

Ich habe zwei edmx-Dateien erstellt, aber beim Erstellen der zweiten edmx-Datei habe ich die Verbindungszeichenfolge ignoriert, die in der Konfigurationsdatei gespeichert werden soll. Auf diese Weise enthält meine Konfigurationsdatei nur eine Verbindungszeichenfolge. Dann habe ich folgende Zeilen in meiner Verbindungszeichenfolge geändert:

%Vor%

Ersetzen Sie einfach "res: //model1.csdl" durch "res: // * /" und es funktioniert wie ein Zauber.

Sie können diesen Verbindungsnamen im Konstruktor Ihrer dbcontext-Klasse wie folgt angeben:

%Vor%

Hinweis: Ich verwende Entity Framework 5.0.

    
SoftSan 19.02.2013 12:22
quelle
1

Ich werde die vollständige Implementierung bereitstellen, die ich zur Lösung dieses Problems (basierend auf den Gandjustas-Hinweisen) durchgeführt habe. Ich habe einen einfachen Wrapper für den Kontext geschrieben, der folgendermaßen verwendet werden kann:

%Vor%

Type ContextWrapper ist eine Vorlage, die einfach den Kontext umschließt, der nur leicht anders konstruiert ist (nur eine Verbindungszeichenfolge verwendend) und dann per Eigenschaft verfügbar gemacht wird. Seine interne Implementierung ist unten platziert:

%Vor%

Sie können die Verwendung der benutzerdefinierten Klasse EntityConnectionManager :

sehen %Vor%

Nun können Sie eine Verbindungszeichenfolge haben:

%Vor%

und Metadaten, die im Abschnitt mit den App-Einstellungen definiert sind (der zweite wichtige Punkt für die Assembly, in dem das Domänenmodell tatsächlich gespeichert ist):

%Vor%

Die Logik für den Typ Setting ist einfach, da sie nur die Einstellungen aus der Konfigurationsdatei herauszieht.

    
jwaliszko 20.02.2013 15:17
quelle