2014-01-15 52 views
4

請你幫助,如果可能的話,是有辦法有負荷運轉使用WCF Ria服務加載的通用方法?

例如通用方式: 這是正常的方式來獲得各部門的數據並將其綁定到電網

grid.ItemsSource = context.Departments; 
LoadDepartmentsData(); 

private void LoadDepartmentsData() 
{ 
EntityQuery<Department> query = context.GetDepartmentsQuery(); 
context.Load(query, LoadOperationIsCompleted, null); 
} 

private void LoadOperationIsCompleted(LoadOperation<Department> obj) 
{ 
      if (obj.HasError) 
       MessageBox.Show(obj.Error.Message); 
} 

所以我的問題是有可能有這樣的事情?

grid.ItemsSource = context.Departments; 

    grid.ItemsSource = context.Departments; 
    LoadData(「GetDepartmentsQuery」); 

    private void LoadData(string queryName) 
    { 
    …..? 
    } 

    private void LoadOperationIsCompleted(LoadOperation obj) 
    { 
       if (obj.HasError) 
        MessageBox.Show(obj.Error.Message); 
    } 

所以,我不知道是否有迭代上下文查詢的一個方法,並將其與查詢,例如名稱,然後執行上匹配查詢負荷運轉的基礎,如下的方式

你的幫助非常讚賞

最好的問候,

回答

1

我已經做了類似的東西(可能會或可能不會很你有一些調整找什麼)。我創建了一個基類,用於我的類中的一個客戶端數據服務,該服務被注入到我的視圖模型中。它有類似下面的方法(有一些重載默認值):

protected readonly IDictionary<Type, LoadOperation> pendingLoads = 
    new Dictionary<Type, LoadOperation>(); 

protected void Load<T>(EntityQuery<T> query, 
    LoadBehavior loadBehavior, 
    Action<LoadOperation<T>> callback, object state) where T : Entity 
    { 
     if (this.pendingLoads.ContainsKey(typeof(T))) 
     { 
      this.pendingLoads[typeof(T)].Cancel(); 
      this.pendingLoads.Remove(typeof(T)); 
     } 

     this.pendingLoads[typeof(T)] = this.Context.Load(query, loadBehavior, 
      lo => 
     { 
      this.pendingLoads.Remove(typeof(T)); 
      callback(lo); 
     }, state); 
    } 

然後,我把它稱爲DataService在:

Load<Request>(Context.GetRequestQuery(id), loaded => 
     { 
      // Callback 
     }, null); 

編輯: 我不知道任何方式通過Ria服務來做到這一點(然而其他人可能)。如果你真的想做的事情是在基類的Load方法中使用一個字符串,而使用反射可以獲得查詢方法,例如(未測試,我不知道這會有什麼可能產生的影響):

// In the base class 
protected void Load(string queryName) 
{ 
    // Get the type of the domain context 
    Type contextType = Context.GetType(); 
    // Get the method information using the method info class 
    MethodInfo query = contextType.GetMethod(methodName); 

    // Invoke the Load method, passing the query we got through reflection 
    Load(query.Invoke(this, null)); 
} 

// Then to call it 
dataService.Load("GetUsersQuery"); 

...什麼...

+0

感謝Alyce是第一個開始回答這個問題,我有類似的基類,但我正在尋找,我的意思是通過通用的方式,通過發送QueryName作爲字符串,'加載(上下文,「QueryName」)',反正再次感謝 – keeper

+0

更新了答案的想法... – Alyce