繁体   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