2010-04-16 4 views
5

Ich habe einen Silverlight-4-App, die Einheiten nach unten aus einer Datenbank mithilfe von WCF RIA Service zieht. Diese Datenobjekte sind ziemlich einfach, nur ein paar Felder, aber eines dieser Felder enthält binäre Daten beliebiger Größe. Die Anwendung benötigt Zugriff auf diese Daten grundsätzlich so schnell wie möglich, nachdem ein Benutzer angemeldet ist, in einer Liste anzuzeigen, Auswahl usw. zu aktivieren.Teileinheit Laden und Management in Silverlight/wcf ria

Mein Problem ist wegen der Größe dieser Daten, die Ladezeiten sind nicht akzeptabel und können sich nähern das Standard-Timeout des RIA-Dienstes.

Ich mag würde irgendwie teilweise die Objekte in meinem lokalen Datenkontext geladen werden, so dass ich die IDs, Namen usw., aber nicht die Binärdaten. Ich könnte dann zu einem späteren Zeitpunkt (dh wenn es wirklich benötigt wird) die Binärfelder der Objekte füllen, die ich anzeigen muss.

Vorschläge, wie dies zu erreichen wäre willkommen.

Ein anderer Ansatz, der mir während des Schreibens dieser Frage (wie oft ist das passiert ?!) ist, dass ich die Binärdaten in eine separate Datenbanktabelle verschieben konnte, die mit dem ursprünglichen Datensatz 1: 1 verbunden war Nutzen Sie das verzögerte Laden von RIA auf diese Binärdaten.

wieder .. Kommentare willkommen! Vielen Dank.

Antwort

5

Ändern Sie nicht Ihre Datenbank. Ändern Sie Ihre Liefermethode.

erstellen seperate WCF RIA-Service für Ihre schnelle Liste der Elemente und verwenden Sie einen POCO (plain old clr Objekt) eine Zusammenfassung der Daten zu herabs Sie benötigen. Dann, wenn Sie bereit für den großen Kerl sind, können Sie eine nach der anderen aus Daten von Ihrem POCO ausgelöst herunterladen.

Brad Abrams und Nikhil Kothari haben über die Verwendung von POCO für eine Weile gesprochen. Sehen Sie sich ihre MIX-Reden an, um weitere Informationen zu erhalten.

Erstellen Sie einen neuen Service für Ihre schnelle Listenelemente:

public class QuickListService : LinqToEntitiesDomainService<MyEntities> 
{ 
    private IQueryable<QuickList> GetQuickList() 
    { 
     return from t in ObjectContext.Table 
       select new QuickList 
       { 
         ID = t.ID, 
        Title = t.Title 
       }; 
    } 
} 

Ihre POCO auf dem Server einfach ein Objekt ist, wie folgt aus:

public class QuickList 
{ 
    public string Title; 
    public long ID; 
} 

Viel Glück!

p.s. Nikhils BookClub App macht das sehr. Wenn Sie eine echte Anwendung sehen müssen, laden Sie folgende App herunter: http://www.nikhilk.net/Content/Presentations/MIX10/BookClub.zip