Dynamics crm 2011 动态CRM插件中Retieve和Update之间的关系
在动态CRM插件中,检索和更新之间是否存在关系? 例如,如果我只检索一个字段:Dynamics crm 2011 动态CRM插件中Retieve和Update之间的关系,dynamics-crm-2011,dynamics-crm-2013,Dynamics Crm 2011,Dynamics Crm 2013,在动态CRM插件中,检索和更新之间是否存在关系? 例如,如果我只检索一个字段: Entity e = (Entity)service.Retrieve("EntityLogicalName", EntityGuid, new ColumnSet(new string[] {"entityid"})); 我是否可以更新实体e中尚未检索到的另一个字段? 例如: e.Attributes["AnotherEntityField1] = "test1"; e.Attributes["AnotherE
Entity e = (Entity)service.Retrieve("EntityLogicalName", EntityGuid,
new ColumnSet(new string[] {"entityid"}));
我是否可以更新实体e中尚未检索到的另一个字段?
例如:
e.Attributes["AnotherEntityField1] = "test1";
e.Attributes["AnotherEntityField2] = "test2";
service.update(e);
如果没有在检索中包含所有要更新的字段,可能会导致一些隐藏的问题吗?您尝试执行的操作完全可以接受,不会导致任何问题。由于您是通过检索操作获得实体实例的,因此将为更新正确设置所需的LogicalName和Id 要添加最初未检索到的新属性,您的代码需要如下所示,否则您将得到一个
KeyNotFoundException
,因为实体
类型只是字典
的包装器
你试图做的是完全可以接受的,不会引起任何问题。由于您是通过检索操作获得实体实例的,因此将为更新正确设置所需的LogicalName和Id 要添加最初未检索到的新属性,您的代码需要如下所示,否则您将得到一个
KeyNotFoundException
,因为实体
类型只是字典
的包装器
你试图做的是完全可以接受的,不会引起任何问题。由于您是通过检索操作获得实体实例的,因此将为更新正确设置所需的LogicalName和Id 要添加最初未检索到的新属性,您的代码需要如下所示,否则您将得到一个
KeyNotFoundException
,因为实体
类型只是字典
的包装器
你试图做的是完全可以接受的,不会引起任何问题。由于您是通过检索操作获得实体实例的,因此将为更新正确设置所需的LogicalName和Id 要添加最初未检索到的新属性,您的代码需要如下所示,否则您将得到一个
KeyNotFoundException
,因为实体
类型只是字典
的包装器
假设您只是检索实体的主键,
entityid
,则不需要进行检索
Entity e = new Entity("EntityLogicalName") { Id = EntityGuid };
e.Attributes.Add("AnotherEntityField1", "test1");
e.Attributes.Add("AnotherEntityField2", "test2");
service.Update(e);
如果要执行检索以确认记录是否存在,则需要尝试/捕获或使用检索倍数,因为如果记录不存在,则
检索将引发异常。假设您只是检索实体的主键entityid
,则无需执行检索
Entity e = new Entity("EntityLogicalName") { Id = EntityGuid };
e.Attributes.Add("AnotherEntityField1", "test1");
e.Attributes.Add("AnotherEntityField2", "test2");
service.Update(e);
如果要执行检索以确认记录是否存在,则需要尝试/捕获或使用检索倍数,因为如果记录不存在,则检索将引发异常。假设您只是检索实体的主键entityid
,则无需执行检索
Entity e = new Entity("EntityLogicalName") { Id = EntityGuid };
e.Attributes.Add("AnotherEntityField1", "test1");
e.Attributes.Add("AnotherEntityField2", "test2");
service.Update(e);
如果要执行检索以确认记录是否存在,则需要尝试/捕获或使用检索倍数,因为如果记录不存在,则检索将引发异常。假设您只是检索实体的主键entityid
,则无需执行检索
Entity e = new Entity("EntityLogicalName") { Id = EntityGuid };
e.Attributes.Add("AnotherEntityField1", "test1");
e.Attributes.Add("AnotherEntityField2", "test2");
service.Update(e);
如果要执行检索以确认记录是否存在,则需要尝试/捕获或使用检索倍数,因为如果记录不存在,则检索将引发异常。当您尝试更新实体时,不需要属性集合中存在字段,但要避免异常“字典中未显示给定的键”是一种很好的做法,首先检查Attributes Collection是否包含要更新的字段。如果是,则只需更新它,否则必须将其添加到实体的Attributes Collection中
if(e.Attributes.Contains("AnotherEntityField1"))
{
e.Attributes["AnotherEntityField1"] = "test1";
}
else
{
e.Attributes.Add("AnotherEntityField1", "test1");
}
//现在更新操作当您试图更新一个实体时,您不需要在attributes Collection中存在字段,但为了避免出现异常“字典中未显示给定的键”“首先检查属性集合是否包含要更新的字段是一个很好的做法。如果是,只需更新它,否则必须将其添加到实体的属性集合中
if(e.Attributes.Contains("AnotherEntityField1"))
{
e.Attributes["AnotherEntityField1"] = "test1";
}
else
{
e.Attributes.Add("AnotherEntityField1", "test1");
}
//现在更新操作当您尝试更新实体时,您不需要属性集合中存在字段,但为了避免异常,“给定的键未显示在字典中”是一个很好的做法,首先检查属性集合是否包含要更新的字段。如果是,只需更新它,否则必须将其添加到实体的属性集合中
if(e.Attributes.Contains("AnotherEntityField1"))
{
e.Attributes["AnotherEntityField1"] = "test1";
}
else
{
e.Attributes.Add("AnotherEntityField1", "test1");
}
//现在更新操作当您尝试更新实体时,您不需要属性集合中存在字段,但为了避免异常,“给定的键未显示在字典中”是一个很好的做法,首先检查属性集合是否包含要更新的字段。如果是,只需更新它,否则必须将其添加到实体的属性集合中
if(e.Attributes.Contains("AnotherEntityField1"))
{
e.Attributes["AnotherEntityField1"] = "test1";
}
else
{
e.Attributes.Add("AnotherEntityField1", "test1");
}
//现在更新操作