Ich habe viele Tutorials gesehen, die über die Verwendung des WCF SQL-Adapters in einem BizTalk-Empfangs-Port zum Einlesen von Daten aus einer SQL Server-Datenbank gehen . Ich konnte jedoch keine Ressourcen finden, die zeigen, wie diese Art von Operation am besten zu handhaben ist, wenn die Daten, mit denen Sie arbeiten, eine Eins-zu-viele-Beziehung haben.BizTalk WCF SQL Adapter: Wie Sie Datensätze aus einer Datenbank mit 1: n-Beziehungen erhalten
Zum Beispiel sagen, ich habe eine Datenbank mit drei Tabellen: Team, Player und Sponsor. Die Tabelle Team befindet sich in einer Eins-zu-Viele-Tabelle mit den Tabellen Player und Sponsor. Grundsätzlich kann ein Team viele Spieler haben, aber ein Spieler kann nur zu einem Team gehören. Ebenso kann ein Team mehrere Sponsoren haben, aber ein Sponsor wird nur ein Team unterstützen.
Ich möchte, dass meine BizTalk-Anwendung nach neuen Teamdatensätzen mit allen zugehörigen Daten fragt. Wenn ein neues Team hinzugefügt wird, möchte ich eine gespeicherte Prozedur verwenden, um dieses Team sowie alle Spieler und Sponsoren für dieses Team einzuladen. Die XSD für das resultierende XML wird natürlich mehrere Player- und Sponsor-Datensätze zulassen.
Ich könnte technisch FOR XML PATH verwenden, um die gesamte XML-Struktur innerhalb der gespeicherten Prozedur zu sammeln und diese an die BizTalk-Anwendung zurückzugeben, aber diese Vorgehensweise würde zu einer unnötig komplizierten gespeicherten Prozedur führen. (Ich arbeite nicht wirklich mit so einer kleinen Datenbankstruktur. Das war nur ein Beispiel für die Einfachheit.)
Das bringt mich zu meiner eigentlichen Frage: Was sind einige bewährte Methoden zum Abrufen von Datensätzen in einem -to-many Beziehung von einer Datenbank, um eine vollständig realisierte XML-Nachricht zu erstellen, die ich in meiner BizTalk-Anwendung verwenden kann?
Gibt es eine Möglichkeit, dies zu tun, nur mit einer gespeicherten Prozedur und dem WCF SQL-Adapter? Die einzige Lösung, die ich mir ausgedacht habe, ist, für jede Tabelle eine separate gespeicherte Prozedur zu verwenden und dann eine Map oder Orchestrierung zu verwenden, um die verschiedenen Teile in mein kanonisches Schema zu bringen. Vielleicht ist das in der Tat der beste Ansatz, aber ich würde gerne wissen, ob es etwas sehr Einfaches gibt, das mir fehlt.
Ich habe noch nicht mit BizTalk gearbeitet, also könnte das Unsinn sein ... Da Sie sich immer für den gesamten Baum interessieren, würde ich vorschlagen, eine 'VIEW' zu erstellen (oder noch besser: eine' Inline-Funktion mit Parametern "), wo Sie' INNER JOIN's verwenden, um Ihre Tabellen zu binden und einen flachen Satz zurückzugeben. Es sollte einfach sein, den Rest auf Anwendungsebene zu erledigen ... – Shnugo
* Sehr wichtige Fragen: 1. Willst du einen Top-Level-Datensatz eins nach dem anderen abrufen, wie ein einzelnes Team oder ein Batch, wie viele Teams? 2. Wie weit geht die 1 zu viele Hierarchie hin. 1 Level wäre Team-> Spieler. 2 Levels wären Team-> Spieler-> Tore. –
1. Ich bin nicht wirklich an eine der beiden Vorgehensweisen gebunden, aber da jeder Datensatz separat behandelt wird, möchte ich ihn einzeln abrufen, wenn möglich, anstatt ihn zu mischen. Wenn sich das Chargen- und Debattieren als einfacher erweist, kann ich sicherlich auf diesen Ansatz eingewirkt werden. 2. Ich werde tatsächlich an zwei getrennten, aber ähnlichen Anwendungen arbeiten. In einem wird der eine zu vielen 1 Level tief sein. In der anderen wird es 2 Ebenen tief sein. Ich beginne mit der 1-Level-Anwendung und gehe zum nächsten, wenn es fertig ist. – NspectorHector