无法使用wcf ria服务更新复合数据

时间:2011-10-27 02:34:25

标签: c# entity-framework wcf-ria-services

假设我有实体MyTab,它具有复合属性MyList。 WCF为MyTab生成代码以进行更新,如:

public void UpdateMyTab(MyTab currentMyTab) 
{          
    this.ObjectContext.MyTabs
                      .AttachAsModified(currentMyTab, 
                                        this.ChangeSet.GetOriginal(currentMyTab));
}

当只有复合数据发生变化时,MyTab数据没有改变,然后提交更改,我将得到错误“值不能为空。\ r \ nParameter name:original。”因为没有原始的MyTab。 changeset将有2个项目:MyTab和MyList。

如何解决此问题?

1 个答案:

答案 0 :(得分:2)

在调用 AttachAsModified 之前,您应首先检查 GetOriginal 的返回值(如果为null)。如果 GetOriginal 返回null,则应仅将实体附加到ObjectContext。我没有测试过,但我会将您的方法更新为以下内容。

public void UpdateMyTab(MyTab currentMyTab) {          
  var original = this.ChangeSet.GetOriginal(currentMyTab);

  if (original != null) {
    this.ObjectContext.MyTabs.AttachAsModified(currentMyTab, original);
  }
  else {
    this.ObjectContext.MyTabs.Attach(currentMyTab);
  }
}