2011-08-17 73 views
1

迄今爲止,我需要處理RIA服務的所有內容都非常簡單,可以使用基於域模型生成的代碼完成。但是,我現在需要在服務器端有一個自定義方法,它執行一些邏輯或調用數據庫中的存儲過程。我可以寫一個自定義的服務器端方法從表中篩選的數據,我需要如下:更新使用RIA服務自定義方法檢索到的數據

public IQueryable<TIMESLOT> GetPermissableTimeslots(
    int roomID, 
    int semesterID, 
    Int16 year) 
{ 
    return this.ObjectContext.TIMESLOTs.Where<TIMESLOT>(
     ts => 
      ts.ROOM_ID == roomID && 
      ts.SEMESTER == semesterID && 
      ts.YEAR == year 
    ); 
} 

(注:我將最終取代通過調用LINQ查詢到一個存儲過程,一旦我得到我現在的問題想通了)

Visual Studio中對此我可以使用如下加載數據在客戶端上生成GetPermissableTimeslotsQuery:

private void LoadPermissibleTimeSlots() 
{ 
     this.domainContext.Load(
      domainContext.GetPermissableTimeslotsQuery(
       this.CurrentRoom.ID, 
       this.CurrentSemester.ID, 
       this.CurrentYear), 
      (result) => 
      { 
       this.Timeslots = result.Entities; 
      } 
      , null); 
} 

現在的問題我已經被添加和更新的時隙用戶客戶端的變化。由於我得到的結果不是一個EntitySet,也沒有直接與TIMESLOTS表相關聯,所以我不能只在結果實體集中更新它們並提交更改。我是否需要將更改的實體附加到與TIMESLOTS表相關聯的EntitySet,以便它們可以提交,還是需要在服務器端添加自定義添加和更新方法以支持此方法?

回答

1

查詢返回的實體應自動附加到域上下文。您應該可以修改它們,並通過調用域上下文的SubmitChanges方法將這些更改傳播回服務器。

要添加新實體,可以將它們添加到域上下文的Timeslots屬性中。

或者,如果您在新實體和其他某個(不需要是Timeslot)之間創建關係,則新實體將被拖入域上下文幷包含在下一次調用SubmitChanges中。

+0

謝謝!看起來我對附件發生的方式和時間有一個基本的誤解。 –

相關問題