C# 在Dynamics CRM 4中执行upsert(更新或插入)操作的干净方法

C# 在Dynamics CRM 4中执行upsert(更新或插入)操作的干净方法,c#,dynamics-crm-4,upsert,C#,Dynamics Crm 4,Upsert,目前,我正在使用以下代码在CRM中执行“upsert” try { crm.Create(c); } catch (SoapException) { crm.Update(c); } 我假设这种类型的更新将从我的业务实体中删除所有现有信息,对吗?如果是这样,我如何从存储库中获取要更新的实体?我需要获取,检索,或者类似的东西吗 谢谢。对流控制使用异常处理在99.99%的情况下是不好的;在本例中,由于您永远不知道SoapException的实际原因是什么 更干净的方法是检查记录的ID字段是否

目前,我正在使用以下代码在CRM中执行“upsert”

try
{
 crm.Create(c);
} 
catch (SoapException)
{
 crm.Update(c);
}
我假设这种类型的更新将从我的业务实体中删除所有现有信息,对吗?如果是这样,我如何从存储库中获取要更新的实体?我需要
获取
检索
,或者类似的东西吗


谢谢。

对流控制使用异常处理在99.99%的情况下是不好的;在本例中,由于您永远不知道SoapException的实际原因是什么

更干净的方法是检查记录的ID字段是否有值;如果是,则进行更新,如果不是,则进行创建(如果进一步使用,可能会将结果ID添加到对象中)。(我们已经看到一个ID为的Create-on-a记录实际上在几年前进行了更新,但我们从未能够复制它。)


除此之外,@ckeller完全正确;对象中为null的属性(因为从数据库检索时它不在列集中,或者在其他情况下没有被设置)在更新中不会被触及。

是否删除“c”的信息取决于它的定义方式。在更新期间,仅更新非空的属性。你能展示一下在所描述的上下文中如何定义“c”吗?