Dynamics 365-N:N Relationship的记录处理

  在Dynamics CRM中,两个Entity之间是能够有N:N Relationship的,可是CRM实现N:N,是经过系统自建立一个中间表来实现的。这个中间表,若是环境是OnPremise,能够根据N:N Relationships的信息,在数据库中找到对应的表。好比Contact和Invoice是N:N的关系,那么咱们先看CRM信息:数据库

  对应的数据库表:sass

  那么,在这个中间表里都记录了什么信息呢?ui

  contact和invoice各自记录的Guid,这条记录自己的Guid和VersionNumber。spa

  

  好了,以上基础知识介绍完毕,在了解了这些以后,咱们进入正题。3d

  如今有这么个状况,Contact和Invoice是N:N Relationship,若是Contact Record A和Invoice Record B错误关联了,想删除这个关联,用Code如何实现呢?code

  可能有的人会说,很简单,经过上面的介绍咱们知道,两条记录的关联关系是经过中间表联系起来的,因此直接删除中间表里相关的记录就能够的。可是若是你真正去操做的话,你会发现CRM并不容许这么操做,由于CRM提供了现成的Request来实现这个目标:DisassociateEntitiesRequest。对象

  对于上述的状况,具体的对象构造以下:blog

DisassociateEntitiesRequest request = new DisassociateEntitiesRequest()
{
       RelationshipName = "ContactInvoices"
};

request.Moniker1 = contactEntityReference;
request.Moniker2 = invoiceEntityReference;

  再往深的考虑一下,若是是批量数据呢?ip

  这个时候,咱们就能够用1:N的思路来考虑解决办法了。例如上面的状况,能够经过Contact和中间表ContactInvoices的关联,查询ContactInvoices的记录结果,而后再对这批结果数据执行DisassociateEntitiesRequest 。ci

  既然有删除关联的Request,那么必然有创建关联的Request:AssociateEntitiesRequest。构造方式跟DisassociateEntitiesRequest 大同小异,这里就很少作赘述了。

  注意:对于Dynamics 365,SDK文档中针对上述的两个Request,都已不推荐使用(虽然CRM 2015也是这样说的的),建议使用替代的Request:AssociateRequest和DisassociateRequest。

相关文章
相关标签/搜索