BizTalk WCF SQL 适配器:如何从具有一对多关系的数据库接收记录

BizTalk WCF SQL Adapter: How to receive records from a database with one-to-many relationships

我看过很多教程介绍如何在 BizTalk 接收端口中使用 WCF SQL 适配器从 SQL Server 数据库中提取数据。但是,当您使用的数据具有 一对多 关系时,我一直无法找到有关如何最好地处理此类操作的任何资源。

例如,假设我有一个包含三个 table 的数据库:团队、球员和赞助商。团队 table 与球员和赞助商 table 处于一对多 table 中。基本上一个Team可以有很多Player,但是一个Player只能属于一个Team。同样,一个战队可以有多个赞助商,但一个赞助商只会支持一个战队。

我希望我的 BizTalk 应用程序轮询新的团队记录以及任何相关数据。添加新团队时,我想使用存储过程来拉入该团队以及该团队的所有球员和赞助商。结果 XML 的 XSD 当然会允许多个玩家和赞助商记录。

我可以在技术上使用 FOR XML PATH 到 assemble 存储过程中的整个 XML 结构,然后 return 到 BizTalk 应用程序,但是这种方法会导致不必要的复杂存储过程。 (我并没有真正使用这么小的数据库结构。为了简单起见,这只是一个例子。)

这让我想到了我的实际问题:从数据库中检索 一对多 关系中的记录以构建完全实现的 XML 我可以在我的 BizTalk 应用程序中使用的消息?

有没有办法只使用存储过程和 WCF SQL 适配器来做到这一点?我能够想出的唯一解决方案是为每个 table 使用单独的存储过程,然后使用 Map 或 Orchestration 将各个部分 assemble 放入我的规范模式中。也许这确实是最好的方法,但我很想知道我是否遗漏了一些非常简单的东西。

您的存储过程应如下所示。

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

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

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

然后通过使用适配器服务从中生成架构。您将获得一个包含三个记录集的架构,然后您可以将其映射到更好的架构。