Dynamics crm 2011 动态CRM插件中Retieve和Update之间的关系

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

在动态CRM插件中,检索和更新之间是否存在关系? 例如,如果我只检索一个字段:

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");
}
//现在更新操作