簡體   English   中英

MVVM Ria服務。 更新現有實體

[英]MVVM Ria Services. Update existing Entity

我發現的每篇文章都顯示了如何使用RIA添加新項目。 沒有人會更新現有數據嗎? 它肯定不喜歡它。

場景:

我正在使用來自VM的服務來提取我的實體。 然后從我的角度使用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);


        }

這也不起作用。 我今天瀏覽了數十篇博客,發現的所有內容始終都是關於添加新實體的,即使他們聲稱它們將向您展示如何更新實體。

我可以很容易地將實體運送到服務器端,然后在那做,但是我不知道那是正確的形式。

更新實體的適當位置在哪里? 我正在使用SL5,我不確定如何告訴您我正在使用哪個版本的RIA Services。

澄清度

我使用視圖模型中的服務調用來檢索實體:

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

我將醫生實體推入我的VM結構中:

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 /桌面背景,所以也許我只是迷失在整個異步環境中。 我只需要朝正確的方向推進即可。

這個問題有點長,所以答案可能有點長:)

如果確實需要,您不應該克隆實體!

BackGround在實體模型中,我們為每個實體都有鍵。 如果檢查域服務,您將看到此key屬性完成的所有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服務開發醫療保健應用程序。 祝好運!

看來您必須在一個會話期間保持數據上下文的生命。 我不喜歡這個,但這就是事實。 我正在從應用程序的下一次搜索中重置domaincontext,以免它變得異常龐大。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM