2010-11-22 5 views
0

Eine Silverlight-Anwendung verwendet WCF RIA-Dienste für die Verbindung mit einer SQL Server-Datenbank. Bevor ich eine Menge neuer Datensätze in eine Tabelle einfüge, sollte ich prüfen, ob diese Tabelle Datensätze mit einem bestimmten Wert in einem der Felder enthält.Überprüfen Sie, ob Datensätze mit einem bestimmten Wert in der Datenbank mit WCF RIA Services vorhanden sind.

Ich bin etwas neu zu Silverlight, so brauchen Sie einen Rat auf richtigen Ansatz im Umgang mit WCF RIA Services.

Sollte ich eine Anfrage machen, die Datensätze nach gegebenem Wert ausfiltert, lade sie und überprüfe dann auf dem Client, ob sie solche Datensätze enthält? So etwas wie das folgende Verfahren in Domain-Serviceklasse ProductService:

public IQueryable<Product> GetProducts(string nameFilter) 
{ 
    return this.ObjectContext.Products.Where(p => p.Name.StartsWith(nameFilter)); 
} 

Oder sollte ich komponieren (in der Domain-Service-Klasse) eine benutzerdefinierte Methode, die auf der Server-Seite alle die Prüfung tun und nur boolean zurückgeben Bestätigung?

Welcher Ansatz ist im Zusammenhang mit Silverlight WCF RIA Services richtiger?

+0

Sie möchten also alle Werte an den Client zurückgeben, falls der Benutzer einen Wert eingibt, der mit einem der Werte in der Datenbank übereinstimmt? – Scottie

Antwort

1

Tun Sie es auf dem Server und senden Sie nur die Daten, die Sie tatsächlich über das Netzwerk benötigen. Wenn Sie das Ergebnis jedoch letztendlich verwenden möchten, würde ich empfehlen, dasselbe in demselben Anruf zurückzugeben, andernfalls führen Sie zwei Anrufe für die gleichen Informationen aus.

So machen wir das in unserer Anwendung.

Die einzigen Einschränkungen Ich würde hinzufügen, wenn Sie einige teure Filterung auf den Daten machen wollen oder die Ergebnismenge zu erweitern, es kann effizienter sein den vollen Satz und Arbeit im Client oder wenn Ihre Daten zurück Das Objekt ist groß und du verwendest es nicht mehr als die Hälfte der Zeit. Dann sind doppelte Aufrufe möglicherweise effizienter.

Es gelten die gleichen Regeln wie bei der "Standard" -Web/Datenbankprogrammierung - Sie möchten nicht zwei (oder mehr) Aufrufe an den Server machen, wo Sie dies tun würden, aber Sie wollen auch keine Daten senden werden nicht verwendet werden. Sie müssen Ihre Anwendung profilieren und erkennen, wo Engpässe bestehen, und den Code von Fall zu Fall analysieren.

Ihre Frage ist etwas verwirrend, da der Code, den Sie angeben, der serverseitige Code ist.

+0

Danke, Chris! +1 – rem