2010-11-23 4 views
0

Eine Silverlight-Anwendung verwendet WCF RIA Services 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.Silverlight WCF RIA-Dienste. Überprüfen des Ergebnisses einer booleschen Methode

Meine Server-Seite Methode in Domain-Service-Klasse:

[Invoke] 
    public bool CheckRec(string nameFilter) 
    { 
     bool res = false; 
     if (this.ObjectContext.MyTest.FirstOrDefault(p => p.Name == nameFilter) != null) 
     { 
      res = true; 
     }    
     return res; 
    } 

Wie ich auf dem Client die Methode Ergebnis überprüfen konnte? Ich versuche, die Art und Weise wie die folgenden, aber etwas Hilfe benötigen diese korrekt umzusetzen:

MyTestContext testcontext = new MyTestContext(); 
string tname = savetdlg.TNameTBox.Text; 
testcontext.CheckRec(tname).Completed += (df, fg) => 
       { 
        bool notunique = ?????? // how to get result of the method? 
        if (notunique == true) 
        { 
         //todo if record exists 
        } 
        else 
        { 
         //todo if record doesn't exist 
        }     
       }; 
+0

orthogonal, aber Ihr Scheck geschrieben werden als Rückgabe this.ObjectContext.MyTest.Any (p => p.Name == NameFilter); –

+0

Abhängig von dem Kontext und dem Grund für die Überprüfung, können Sie auch einfach die 'if' Prüfung an den Anfang des Serveraufrufs hinzufügen, der die Einfügungen ausführt. Natürlich, wenn Sie es brauchen, um 2 separate Anrufe (zum Beispiel die Anzahl der Datensätze, die hochgeladen/geschrieben werden, ist riesig und es ist ziemlich üblich, dass Sie sie nicht schreiben müssen), dann vergiss es. :) –

+0

IMHO sollten Sie diese Art des Anschlusses an das abgeschlossene Ereignis (oder ähnliche Art von Ereignis) nicht verwenden, nachdem der Vorgang gestartet wurde - wenn Sie sowieso die Logik in einem 'inline' Lambda definieren möchten, rufen Sie einfach an die Überladung, die Sie in der Aktion > statt, IMHO :) Hooking auf "abgeschlossen", nachdem eine Operation bereits gestartet hat nur scheint, wie Sie eine Race Condition hinzufügen, wenn es ziemlich einfach zu vermeiden ist, obwohl ich Ich gebe zu, dass es unwahrscheinlich ist, dass man trifft. –

Antwort

2

Nun, in der folgenden Weise:

MyTestContext testcontext = new MyTestContext(); 
string tname = savetdlg.TNameTBox.Text; 

testcontext.CheckRec(tname, context_CheckRecCompleted, null); 

void context_CheckRecCompleted(InvokeOperation<bool> op) 
    { 
     bool notunique = op.Value; 
     if (notunique == true) 
     { 
      //todo if record exists 
     } 
     else 
     { 
      //todo if record doesn't exist 
     } 
    } 
+1

nur neugierig, warum übergeben Sie den zweiten Parameter als x => context_CheckRecCompleted (x) statt nur context_CheckRecCompleted? Nicht, dass es wirklich wichtig ist, nur neugierig :) –

+0

@James Manning Ja, Sie haben Recht. Korrigiert den Code. Vielen Dank! – rem

Verwandte Themen