【问题标题】:CRM SDK update record with related lookupCRM SDK 更新记录及相关查询
【发布时间】:2015-04-13 20:48:07
【问题描述】:

我有一个实体(服务器),它在另一个实体(主机)上有一个 1:N 查找字段。 通过 SDK,我可以轻松创建记录:

foreach (VirtualMachine vm in vmObjects)
        {
            new_server newServer = new new_server();
            newServer.new_name = vm.Name;
            newServer.new_Memory = vm.Memory;
            newServer.new_new_host_new_server_Host = xrm.new_hostSet.Where(x => x.new_HostSCVMMId == vm.HostId).Single();
            xrm.AddObject(newServer);
        }
        xrm.SaveChanges();

新记录具有正确的“主机”查找相关字段集。 现在,当我尝试更新记录时:

foreach (VirtualMachine vm in vmObjects)
        {
            new_server updateServer = xrm.new_serverSet.FirstOrDefault(x => x.new_VMId == vm.VMId);
            if (updateServer != null)
            {
                updateServer.new_name = vm.Name;
                updateServer.new_Memory = vm.Memory;
                updateServer.new_new_host_new_server_Host = xrm.new_hostSet.Where(x => x.new_HostSCVMMId == vm.HostId).Single();
                xrm.UpdateObject(updateServer);
            }
        }
        xrm.SaveChanges();

它给出以下错误(如果我用 new_host_new_server_Host 注释掉该行,那么它将正确更新例如内存。

An unhandled exception of type 'System.InvalidOperationException' occurred in Microsoft.Xrm.Sdk.dll
Additional information: The collection is read-only.

为什么我不能仅仅因为它是一个查找字段就更新记录的 Host 属性?

【问题讨论】:

    标签: c# dynamics-crm-2011 dynamics-crm crm dynamics-crm-2013


    【解决方案1】:

    您需要使用 EntityReference 类型设置属性,而不是您正在设置的属性。

    【讨论】:

    • 非常感谢。我很难弄清楚如何使用 EntityReference 来做到这一点。你可以给我一个例子吗?谢谢
    【解决方案2】:

    感谢蓝山,

    我终于明白了:

    Guid hostGuid = xrm.new_hostSet.Where(x => x.new_HostSCVMMId == vm.HostId).Single().Id;
                    updateServer.new_Host = new Microsoft.Xrm.Client.CrmEntityReference("new_host", hostGuid);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多