none
ConnectionStrings von anderem Projekt übernehmen RRS feed

  • Frage

  • Servus zusammen,

    ich hätte da mal ne Frage. Ich Versuche mich gerade etwas an MVVM und ich habe für meine Daten ein extra Projekt angelegt. Dort habe ich ein EntityFramework mit passendem ConnectionString.

    Das Problem ist wenn ich in meiner View eine Instanz von meinem ViewModel erstelle bekomm ich immer den Fehler

    In der Anwendungskonfigurationsdatei wurde keine Verbindungszeichenfolge mit dem Namen 'WindEntities' gefunden

    Ich hab der App.config meines ersten Projekts mal den mal den ConnectionString eingefügt und dann klappt das zwar doch die Fehlermeldung kommt trotzdem noch. Deswegen wollt ich mal frage, ob mir vielleicht jemand helfen kann

    Grüße Jo

    Dienstag, 23. April 2013 14:32

Antworten

  • Hallo Jo,

    wenn Du mehrere Projekte hast, so käme die Verbindungzeichenfolge in die App.Config des ausführenbaren Projekts. Und Du kannst sie auch aus anderen Projekten kopieren.

    Das Entity-Framework sucht in der Verbindungszeichenfolge, über metadata nach den Metadaten. Wenn sich die in einer externen Assembly befinden, musst Du den Eintrag darauf anpassen.

    Ein Beispiel für DbContext findest Du u. a. Connections and Models

    Gruß Elmar

    Mittwoch, 24. April 2013 08:39

Alle Antworten

  • Hi Joachim,
    Du kannst den ConnectionString in der app.config des eigentlichen Programmes ablegen und dann bei der Instanziierung des MVVM übergeben – im Konstruktor oder einem anderen Member. Dort übergibst Du den ConnectionString dem Konstruktor des EDM-Contextes.
     
    --
    Peter Fleischer
    Dienstag, 23. April 2013 17:05
  • Hi Peter,

    vielen Dank für den Tipp, hättest du mir dafür eventuell ein Beispiel wie den ConnectionString in C# übergebe ? Steh leider da etwas auf dem Schlauch.

    Grüße Jo

    Dienstag, 23. April 2013 17:37
  • Hallo Jo,

    wenn Du mehrere Projekte hast, so käme die Verbindungzeichenfolge in die App.Config des ausführenbaren Projekts. Und Du kannst sie auch aus anderen Projekten kopieren.

    Das Entity-Framework sucht in der Verbindungszeichenfolge, über metadata nach den Metadaten. Wenn sich die in einer externen Assembly befinden, musst Du den Eintrag darauf anpassen.

    Ein Beispiel für DbContext findest Du u. a. Connections and Models

    Gruß Elmar

    Mittwoch, 24. April 2013 08:39
  • Guten Morgen Elmar,

    und Danke für deine Hilfe. Ich hätte da noch eine Frage, denn es klappt soweit das wenn ich das ViewModel in Standartverzeichnis habe, doch wenn ich das in einen Ordner für meine ViewModels habe Kommt der Fehler wieder. Wie oder wo kann ich denn das ändern ??? Hättest du mir da noch eine Hilfe, denn ich hab inzwischen keinen Plan mehr.

    Liebe Grüße Jo

    Donnerstag, 25. April 2013 07:01
  • Hallo Jo,

    eigentlich sollte das nichts am Connection String ändern, denn betrifft normalerweise das Model und das ViewModel greift nur auf die Model Klassen zu.

    Der Pfad der Metadaten ergibt sich (in C#) aus dem Stamm-Namespace + den Unterverzeichnissen. Hast Du die EDMX etc. in einem Unterverzeichns liegen, so musst Du ihn in den Pfad mit aufnehmen oder "*" verwenden.

    Mehr findest Du im oben angeführten Link bei Modell- und Zuordnungsdateispeicherorte

    Gruß Elmar

    Donnerstag, 25. April 2013 10:12
  • Hallo Elmar,

    ich habe in meinem ViewModel zwei ObservableCollections, die aber vom Model gefüllt werden.
    Mein ConnectionString in der App.config in dem Projekt wo meine View und ViewModel sind sieht so aus:

    <connectionStrings>
        <add name="JustWindEntities" 
    connectionString="metadata=res://*/DatenModel.csdl|res://*/DatenModel.ssdl|res://*/DatenModel.msl;
    provider=System.Data.SqlClient;
    provider connection string=&quot;data source=(localdb)\v11.0;
    initial catalog=JustWind;integrated security=True;
    MultipleActiveResultSets=True;App=EntityFramework&quot;"
    providerName="System.Data.EntityClient" /> </connectionStrings>

    Mein DatenModel.Context in dem Projekt mit der DB sieht so aus

    public partial class JustWindEntities : DbContext
        {
            public JustWindEntities()
                : base("name=JustWindEntities")
            {
            }
      ....

    Da ich das Database First gemacht habe müsste soweit ich das verstanden habe so auch richtig sein.

    In dem Projekt mit den Daten ist das EDMX in keinem Unterordner.
    In dem Startprojekt ist meine View im Unterordner Views und mein ViewModel im Unterordner ViewModels

    Ich kapier grad leider nicht genau wie ich meiner View, oder ViewModel den ConnectionString übergeben kann.

    Liebe Grüße Jo

    Donnerstag, 25. April 2013 11:00
  • Hallo Jo,

    befindet sich das Entity Framework Modell im gleichen Projekt oder ist es ein separates?

    Nach oben müsste es sich im gleichen Projekt befinden. Denn das EF schreibt die Metadaten als Ressource in die Assembly. Und würde sie nicht finden, wenn sie sich in einer anderen Assembly befinden.

    Für separates Projekt: Ersetze die drei

    res://*/DatenModel....

    durch

    res://NameDerAssembly/DatenModel....

    Gruß Elmar

    Donnerstag, 25. April 2013 15:34
  • Guten Morgen Elmar,

    das Entity Framework Modell befindet sich in einem anderen Projekt und ich habe den ConnectionString jetzt angepasst, vielen Dank dafür. Ich glaube mein größter Fehler dazu war ich wollte im Konstruktor meines ViewModels eine ObservableCollection erstellen und mit Daten füllen. Ich lege jetzt zwar eine neue ObservableCollection an aber habe das befüllen in eine andere Methode gelegt und jetzt klappt alles.

    Vielen Dank

    Liebe Grüße Jo

    Freitag, 26. April 2013 06:34