首页 > 解决方案 > 当要更新的实体具有对另一个实体的引用时,App.Data.Update 会引发对象引用错误

问题描述

当我尝试保存实体中的更改时,使用dynCode.App.Data.Update. 我检查了数据字典中的所有变量和元素是否都可用,就是这种情况。代码:

public void ProcessReOrder(string elementId, string order)
{
    var entityGuid = Guid.Parse(elementId);
    decimal orderNr = Convert.ToDecimal(order);
    var tabId = Dnn.Tab.TabID;
    var modId = Dnn.Module.ModuleID;
    var block = ToSic.Sxc.Dnn.Factory.CmsBlock(tabId, modId);
    var dynCode = ToSic.Sxc.Dnn.Factory.DynamicCode(block);
    var formElement = dynCode.AsList(dynCode.App.Data["FormElements"]).Where(x => x.EntityGuId == entityGuid).FirstOrDefault();
    var converter = new EntitiesToDictionary();
    var data = converter.Convert(AsEntity(formElement));
data["Order"] = orderNr;
    dynCode.App.Data.Update(formElement.EntityId, data); <-- Throws the error
}

FormElements当实体具有到另一个实体的链接时,它看起来可能是一个问题。当我创建一个只有名称(字符串)和订单(数字)作为字段的小样本并发送带有新订单号的 webApi 帖子时,它可以正常工作。

如何使用对其他实体的一个或多个引用来更新实体?

更新:问题已修复使用

Data["Form"] = new List<Guid>() { guid }

当您有字段组的空白字段时,我发现了第二个问题。当我有一个空字段时,我得到相同的对象引用错误。

标签: 2sxc

解决方案


数据引用应该是 ID 指针——int 或 guid,作为列表或数组。

因此,即使您指向 1,也要确保它是[1]or new List<int>() { 1 }ornew List<Guid>() { guid}

类似的东西。


推荐阅读