2012-04-11 7 views
3

Ich schreibe eine Anwendung (WPF), wo ich das Prisma-Framework verwende. Ich habe einen Kunden mit dem Shellview. Ich habe einige Module. Das sind also verschiedene Projekte. Jedes Modul ist ein separates Projekt. Die Module werden von Unity geladen.Prism + Module verwenden WCF als Datenzugriffsschicht

Ich habe folgendes

Solution 
Client 
    Modules 
    Client (app) 

Common 
    Entities 

Server 
    Data 
    Web 

So können Sie ich habe ein Data Project unter dem Server-Ordner. Dort finden Sie die edmx. Das Webprojekt ist leer, das Entitätsprojekt ist ebenfalls leer.

Der Client (App) hat eine Shellview mit seinem Bootstrapper. Der Client funktioniert. Nur die Datenzugriffsebene muss integriert sein.

Was ist die beste Lösung für den Datenzugriff? WCF, noch etwas? Welche Vorlage müssen wir für die Entitäten verwenden? Wie können wir den Dienst in den Modulen verwenden, in denen sich der Code (View/ViewModel) befindet?

Pff, ich suche und lese so viel. Einige Themen auf Stackoverflow gefunden. Aber keines der Themen beginnt von Anfang an. Hoffe jemand kann mir helfen.

+0

Welche Methode des Datenzugriffs Sie verwenden, ist ziemlich orthogonal zu Ihrer Wahl, Prisma/Einheit zu verwenden.Die Methode, die Sie auswählen, hängt mehr von anderen Faktoren ab, wie Ihre Datenbank aussieht, ob Sie die Kontrolle über den Datenspeicher haben, Ihre Skalierbarkeitsanforderungen erfüllen, ob Sie ein ORM verwenden möchten, usw. – lecrank

+0

Sie sollten versuchen, Ihre Frage besser. Sie haben eine Handvoll Fragen gestellt (Welche Methode des Datenzugriffs? Kann ich meine DAL direkt von meinem ViewModel aus verwenden? Usw.) Das sind alles Fragen, die Sie wahrscheinlich separat stellen und gründlich erklären sollten, wenn Sie erwarten, dass die Leute den Kontext Ihrer verstehen Problem und bieten guten Rat. Sonst scheinst du nur zu sagen: "Ich habe einen Teil dieses Projekts entworfen, bin aber steckengeblieben ... kann jemand da draußen im Internet-Land den Rest für mich erledigen?" – lecrank

+0

Meine Datenbank ist mit dem Entity Framework aufgebaut. Erzeugt den Code von der edmx, die ich gebaut habe. Skalierbarkeit -> Es wird nur in meinem lokalen Netzwerk verwendet. Ich habe bereits WCF-Dienste verwendet, aber nicht mit edmx Funktionen/Module Prisma. Immer direkt vom Service zu einem Kunden, mit Verträgen, die ich selbst geschrieben habe. Jetzt sollte es die edmx-Entitäten verwenden. Ich möchte nicht, dass jemand den Rest erledigt. Ich hoffe nur jemand kann mir helfen, richtig anzufangen. – Sven

Antwort

0

Ich empfehle Ihnen, POCO oder STE auf .edmx zu generieren und das Repository-Muster für den Datenbankzugriff zu verwenden. Erstellen Sie ein separates WCF-Dienstprojekt, und rufen Sie diese Repositorys auf.

Ihre Prism Solution verfügt über ein Proxy-Projekt mit der statischen Klasse, um das Serviceobjekt zurückzugeben, und Ihre Client (Prism) -App ruft die WCF-Dienste auf.

+0

Haben Sie vielleicht eine Website mit einem Beispiel? Ich finde auch einige Informationen, dass POCO ein Nein ist. Jetzt sollten Sie DbContext verwenden ?? – Sven

+0

Überprüfen Sie diesen Link http://microsoftnlayerapp.codeplex.com/ –

+0

Das Problem ist nicht, wie man mit WCF arbeitet ..... Aber mehr WCF mit Prisma und das für WPF, nicht Silverlight. – Sven

0

Vielleicht können Sie sich das Calcium SDK (http://calcium.codeplex.com/) ansehen, das die modulare Prism-App-Entwicklung unterstützt und WCF-Dienste unterstützt.

+0

Ich denke, es ist ein bisschen zu groß für das, was ich brauche. Es braucht nicht mit WCF. Es kann auch mit einer anderen Technologie sein. :) – Sven

0

Wenn Sie mit WCF und EntityFramework auf der Serverseite vertraut sind, dann ist dies der richtige Weg.

Um die generierten Proxy-Klassen aus Services wiederzuverwenden, können Sie Ihre Service-Referenzen in einer allgemeinen Assembly aufbewahren, die Sie aus allen Modulen referenzieren. Etwas wie "Infrastruktur" ist eine gute Namenskonvention.

Wenn eines Ihrer Module eine einzigartige Funktionalität benötigt, dann legen Sie die Service-Referenz auf dieses Projekt.

Bei WPF clent: Verwenden Entity Framework Code ersten und Ihre Modellklassen in einer separaten Baugruppe trennen, so dass Sie sie in Ihrem Haupt-Client und Module wiederverwenden können.

Bei silveright Client: Wenn doppelte Modellklassen und Namespaces, wenn Sie den Dienst-Proxy-Generierung ein Problem für Sie ist, können Sie WCF RIA Services Kasse. Denken Sie immer daran, dass Sie zwei Assemblies mit Silverlight und .net mit RIA Link in Visual Studio-Projektdateieigenschaften verknüpfen können. Dann kann jede von Ihnen gewählte serverseitige Codedatei auf dem Client wiederverwendet werden. Dies ist möglich, indem Sie das Suffix "shared" in Ihrem Dateinamen verwenden (z. B. enums.shared.cs), unabhängig davon, ob Sie WCF-Dienste verwenden oder nicht. Sie können mehr herausfinden here und here

Hoffe das half.

+0

Ich möchte Silverlight nicht in meinem Projekt verwenden. :( – Sven

+0

Sorry für den Silverlight Teil. Ich wurde weggetragen :) Nur meine Antwort aktualisiert, um den WPF Teil besser zu decken. – cleftheris

+0

Das ist nicht das Problem. Ich habe bereits ein Common.Model erstellt. Wo ich meine Entitäten hinzugefügt habe. Mein Service läuft auch. Das einzige Problem besteht darin, diesen Dienst in meiner Clientanwendung zu verwenden. Das benutzt Prisma. Also ich habe verschiedene Module. – Sven