Es gibt viele Möglichkeiten, das anzugehen, also das Beste, was ich tun kann, ist zu teilen, was ich tue.
1) Erstellen Sie für jede Domain einen Kontext basierend auf Funktion. Zum Beispiel werde ich einen Kontext für alle Benutzerfunktionen haben, einen für alle Kundenfunktionen, einen für Bestellfunktionen usw. Dies ermöglicht eine saubere Segmentierung der BusinessLayer.
2) Erstellen Sie benutzerdefinierte Klassen im Webprojekt, die anstelle der abstrahierten Ansichten zurückgegeben werden, die vom Assistenten erstellt wurden. Persönlich habe ich ein Problem damit, den Namen meiner DB-Ansicht im zurückgegebenen IQueryAble an das Silverlight-Projekt anzugeben, da das Silverlight-Projekt als die UI-Schicht betrachtet werden kann. Es erzwingt eine indirekte Abhängigkeit von der DataLayer, die wir nicht möchten. Ja, es erfordert mehr Arbeit beim Hinzufügen zusätzlicher Klassen, aber es hilft, die Abstraktion für eine ordnungsgemäße 3-Schichten-Architektur durchzusetzen.
3) Erstellen Sie benutzerdefinierte Klassen auf der UI-Ebene, die die zurückgegebenen Daten aus den zugeordneten Methoden (aus dem DataContext) verarbeiten. Dies hilft, die Abstraktion durchzusetzen.
Denken Sie daran, das Ziel ist es, Ihren Code so locker gekoppelt wie möglich zu gestalten. Das erfordert immer zusätzliche (und manchmal redundante) Codierung von Ihrer Seite, aber das Endergebnis ist die Mühe wert.
Sie können auch in Betracht ziehen, eine RIA-Klassenbibliothek zu erstellen; dies ermöglicht eine weitere Abstraktion. Es ist nicht die einfachste Implementierung, aber es ist ein Schritt in die richtige Richtung, wenn Sie versuchen, die Kommunikation zwischen den Silverlight- und Webprojekten zu erleichtern.