CRM SDK更新记录及相关查询
CRM SDK update record with related lookup
我有一个实体(服务器),它在另一个实体(主机)上有一个 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();
新记录具有正确的 "Host" 查找相关字段集。
现在,当我尝试更新记录时:
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.
为什么我不能更新记录的主机 属性 因为它是一个查找字段?
您需要使用 EntityReference 类型设置 属性 而不是您正在设置的 属性。
谢谢 BlueSam,
我终于明白了:
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);
我有一个实体(服务器),它在另一个实体(主机)上有一个 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();
新记录具有正确的 "Host" 查找相关字段集。 现在,当我尝试更新记录时:
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.
为什么我不能更新记录的主机 属性 因为它是一个查找字段?
您需要使用 EntityReference 类型设置 属性 而不是您正在设置的 属性。
谢谢 BlueSam,
我终于明白了:
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);