在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。