2013-03-17 83 views
0

我發現的每篇文章都展示瞭如何使用RIA添加新項目。任何人都不會更新現有的數據?它確實不像它。MVVM Ria服務。更新現有實體

場景:

我使用從我的VM服務在我的實體拉。然後使用我的視圖中的虛擬機編輯該實體。然後我想將我的實體保存回數據庫。我不想添加它。我不想刪除它。我想更新它。我在服務器端看到了這些方法,但我所擁有的是在我的datacontext上提交更改。

我試圖克隆原來的實體,然後裝上原來的實體和當前實體複製到它

public void SaveDoctors(Doctors current, Doctors original, Action<SubmitOperation> callback) 
     { 
      var ctx = new RefereeDomainContext(); 

      ctx.Doctors.Attach(original); 
      original = current; 
      ctx.SubmitChanges(callback,null); 


     } 

這也不起作用。我今天已經瀏覽了10多個博客,而且我發現的任何內容都是關於添加新實體,即使他們聲稱他們會告訴你如何更新實體。

我可以很容易地將實體運送到服務器端並在那裏執行,但我不知道這是正確的形式。

哪裏是更新實體的適當位置?我正在使用SL5,我不知道如何告訴你我正在使用的RIA服務的版本。

澄清

我檢索使用我的視圖模型服務呼叫我的實體:

Doctors doctors = GetService<IDoctors>.GetDoctor().FirstorDefault(d=>d.id=xxxx); 

我把醫生實體到我的虛擬機結構:

DoctorsVM=new DoctorsVM(doctors); 

該持有參考通過視圖模型的屬性進行編輯的醫生。任何子項都填充到子對象的ObservableCollections中。

當我與這個特定的實體完成,我準備將它保存:

GetService.UpdateCurrentDoctor(DoctorsVM.Doctor)//引用原始實體。

這是我失去它的地方。如果我這樣做:我的方法中它不工作

var ctx=new DataContext; 
ctx.Attach(currentDoctor);//attaches as unmodified 

ctx.Add(currentDoctor);//creates a new Entity. Dont want that. 

ctx.AttachAsModified僅是在服務器端使用。 ctx.UpdateDoctors僅在服務器端可用。

這是我迷路的地方。

我來自WPF /桌面背景,所以也許我只是迷失在整個異步景觀。而且我只需要一個正確的方向。

回答

0

看起來,您必須保持datacontext在一個會話期間保持活動狀態。我不喜歡這個,但它就是這樣。我正在重新設置應用程序的下一個搜索的domaincontext,以便它不會變得非常龐大。

0

長了一點問題,所以答案可以有點長:)

你不應該複製的實體,如果你真的需要它!

BackGround 在實體模型中,我們爲每個實體都有鍵。如果您檢查域服務,您將看到由該關鍵屬性完成的所有CRUD操作。如果您從服務器端返回一個集合,則兩個實體具有相同的密鑰,您將在客戶端看到其中一個實體。

答案 它更容易更新記錄。只需使用DomainService類實例獲取實體獲取您想要修改的項目然後提交它即可。就這些。

 //a line of unsafe-dummy code 
     domService.GetDoctorByID("124..").FirstOrDefault().CitizenNumber='CN123'; 

     //domService class track changeset so it decide update 
     domService.SubmitChanges();  
     //Update occurs by entity key i.e. DoctorID 

我看到「醫生」的表達,我們還使用Silverlight & RIA服務開發醫療應用。祝你好運!

+0

但問題是我一收到信息就不編輯信息。我把它帶進去,將它返回給客戶端,導致它分離。客戶端操作它,然後重新附加它到域服務。但客戶方面的附加條款未加修改。 – ecathell 2013-03-18 11:26:49

+0

從您的標題問題「MVVM Ria服務。更新現有實體」我不明白這一點。你的意思是你不改變一個領域,但它似乎改變了服務器?你跟蹤ChangeSet變量嗎?除此之外,如果您不更改某些內容,則可能會調用拒絕而不是提交。 – 2013-03-18 11:48:03

+0

虐待編輯我的問題,使盡量使它更清晰。但是,是的,我正在改變實體。但是當它不再附加到datacontext時,我正在更改它,因爲它從檢索實體的服務中跨越到用於獲取它的viewmodel。 – ecathell 2013-03-18 12:26:48

相關問題