假设我有实体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。
如何解决此问题?
答案 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);
}
}