[英]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.