2013-03-17 79 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