2010-11-23 13 views
0

Silverlightアプリケーションは、SQL Serverデータベースへの接続にWCF RIA Servicesを使用します。テーブルに新しいレコードの束を挿入する前に、このテーブルにフィールドのいずれかに特定の値を持つレコードが含まれているかどうかを確認する必要があります。Silverlight WCF RIAサービス。ブールメソッドの結果を確認する

ドメインサービスクラスの私のサーバー側のメソッド:

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

は、私は、クライアント上のメソッドの結果を確認することができますか? 私は、次のような方法を試したが、これを正しく実装するためにいくつかの助けを必要としています:

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

直交するが、あなたのチェックのように書くことができますObjectContext.MyTest.Anyを返します(p => p.Name == nameFilter)。 –

+0

チェックのコンテキストと理由に応じて、挿入を行うサーバコールの先頭に「if」チェックを追加することもできます。もちろん、2つの別々の呼び出しが必要な場合(たとえば、アップロード/書き込みされるレコードの数が膨大で、書き込みが不要なことはよくあることです)、気にしないでください。 :) –

+0

IMHOこの種の操作は、操作が開始された後に完了したイベント(または同様の種類のイベント)に接続しないでください - もしあなたがインラインのラムダでロジックを定義するつもりなら、アクション>を代わりに渡すことができるオーバーロード、IMHO :)操作が既に開始された後に「完了」にフックアップすることは、あなたが意図的に競合状態を追加しているように思われるヒットする可能性は低いと認めます。 –

答えて

2

さて、次のように行わ:

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

ちょうど興味深いですが、なぜcontext_CheckRecCompletedではなくx => context_CheckRecCompleted(x)として2番目のパラメータを渡すのですか?それほど重要ではない、ちょうど興味がある:) –

+0

@James Manningはい、あなたは正しいです。コードを修正しました。ありがとう! – rem

関連する問題