2010-11-23 1 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)로 전달해야합니까? 그것이 정말로 중요하지 않은 것, 단지 호기심 :) –

+0

@James Manning 네, 맞습니다. 코드를 수정했습니다. 감사! – rem