2016-06-07 17 views
1

我已經看過許多教程,介紹如何在BizTalk接收端口中使用WCF SQL適配器來從SQL Server數據庫中提取數據。但是,當您使用的數據具有一對多關係時,我一直無法找到如何最好地處理這種相同操作的任何資源。BizTalk WCF SQL適配器:如何通過一對多關係從數據庫接收記錄

例如,假設我有一個包含三個表的數據庫:Team,Player和Sponsor。團隊表與播放器和贊助商表格在一對多的表格中。基本上,一支球隊可以有很多球員,但一名球員只能屬於一支球隊。同樣,一支球隊可以有多個贊助商,但贊助商只會支持一支球隊。

我想讓我的BizTalk應用程序輪詢新的團隊記錄以及任何相關數據。當添加新的團隊時,我想使用存儲過程來拉入該團隊以及該團隊的所有玩家和贊助商。結果XML的XSD當然會允許多個玩家和贊助商記錄。

我可以在技術上使用FOR XML PATH從存儲過程中組裝整個XML結構並將其返回給BizTalk應用程序,但這種方法會導致不必要的複雜存儲過程。 (我並不是真的在處理這麼小的數據庫結構,這只是爲了簡單起見)

這使我想到我的實際問題:有哪些最佳做法可用於檢索中的記錄從一個數據庫到多個關係來構建完全實現的XML消息,我可以在我的BizTalk應用程序中使用它?

有沒有辦法做到這一點,只是使用存儲過程和WCF SQL適配器?我已經能夠想出的唯一解決方案是爲每個表使用單獨的存儲過程,然後使用Map或Orchestration將各個部分組合到我的規範模式中。也許這確實是最好的方法,但我非常想知道是否有一些非常簡單的東西我缺少。

+0

我還沒有與BizTalk合作,所以這可能是垃圾......因爲你似乎對整棵樹感興趣總是建議創建一個'VIEW'(甚至更好:一個'內聯函數與參數')你在哪裏使用'INNER JOIN's綁定你的表並返回一個平面集。在應用程序級別執行其他操作應該很容易... – Shnugo

+0

*非常重要的問題:1.是否想要一次檢索一個最高級別的記錄,如單個團隊或批處理,就像許多團隊一樣。 2. 1到多層次結構走多遠。 1級將是團隊 - >玩家。 2個等級將是團隊 - >玩家 - >目標。 –

+0

1.我並沒有真正受限於任何一種方法,但是由於每條記錄都會單獨處理,所以我傾向於一次檢索一條記錄,而不是儘可能分批檢索。如果配料和辯論變得更容易,那麼我肯定會對這種方法產生影響。我實際上正在研究兩個獨立但相似的應用程序。其中之一,一對多將是1層深。另一方面,這將是2級深。我將從1級應用程序開始,並在完成時移動到另一個應用程序。 – NspectorHector

回答

3

您的存儲過程應該看起來像這樣。

SELECT [TeamName] 
FROM [Team] 
WHERE [TeamID] = @NewTeamID 

SELECT [PlayerName] 
FROM [Player] 
WHERE [TeamID] = @NewTeamID 

SELECT [SponsorName] 
FROM [Sponsor] 
WHERE [TeamID] = @NewTeamID 

然後通過Consume Adapter Service生成模式。您將得到一個包含三個記錄集的架構,然後您可以映射到一個更好的架構。

+0

太棒了,謝謝Dijkgraaf!經過一些試驗和錯誤之後,我才得以實施。這裏有一些事情要記住任何人得到錯誤。有一件事我沒有給予足夠的關注,因爲我有一些包含具有相同名稱的列的聯接。正如您可能已經猜到的,我不得不重構我的查詢以避免這種情況。另一件事是我在查詢中也有臨時表,這導致了其他問題。有關更多信息,請參閱此頁:http://thoughtsofmarcus.blogspot.com/2010/11/calling-stored-procedures-from-biztalk.html – NspectorHector

相關問題