Ausgehend vom Azure-Portal unter portal.azure.com wird zunächst ein neues Cosmos DB-Konto angelegt:
Es gibt verschiedene APIs, die man für Cosmos DB verwenden kann. Wählen wir „SQL“, da ich voll und ganz darauf vertraue, dass wir eine Verbindung zu MongoDB oder Cassandra über die entsprechenden Datenprovider herstellen können.
Sobald dieser Prozess abgeschlossen ist, fügen wir eine Sammlung hinzu:
Praktischerweise bietet Microsoft den Download einer automatisch generierten .NET-Beispielanwendung an, sobald die Sammlung erstellt wurde. Die Lösung heißt „To-Do“ und hat – im Kern – ein Modell für die in der Sammlung enthaltenen Objekte:
public class Item { [JsonProperty(PropertyName = "id")] public string Id { get; set; } [JsonProperty(PropertyName = "name")] public string Name { get; set; } [JsonProperty(PropertyName = "description")] public string Description { get; set; } [JsonProperty(PropertyName = "isComplete")] public bool Completed { get; set; } }
Sobald die Anwendung läuft, erstellen wir ein paar neue To-Dos aus der Benutzeroberfläche:
Die Hauptansicht der mitgelieferten Beispielapplikation zeigt dann die To-Dos:
Auf der Server-Seite können wir diese Dokumente dann im Data Explorer von Azure einsehen:
Um eine Verbindung zu meiner Datenbank über „normales“ SQL herzustellen, stehen die Endpunkt-URI und Schlüssel im Abschnitt „Keys“ des Azure-Portals zur Verfügung – entweder nur zum Lesen, was in meinem Anwendungsfall ausreichend ist, oder für den R/W-Zugriff. Wir werden die beiden gleich noch brauchen.
Zurück auf der Client-Seite erstelle ich eine WPF-Anwendung, da mir die Wiederverwendung der bestehenden To-Do-Anwendung viel zu einfach erscheint – da ist der ganze Datenzugriff schon fertig verdrahtet.
Glücklicherweise liefert Microsoft ein NuGet-Paket aus, das referenziert werden kann, um auf Cosmos DB SQL-Daten zuzugreifen:
Dieses Paket fügen wir dem Projekt hinzu. Wenn alles soweit passt, einfach einige Namespaces zur „uses“-Klausel hinzufügen und einen neuen DocumentClient einrichten, um auf die Daten zuzugreifen:
private const string endpointUrl = "…"; private const string primaryKey = “…”; private DocumentClient client; private void button_Click(object sender, RoutedEventArgs e) { client = new DocumentClient(new Uri(endpointUrl), primaryKey); IQueryable<Item> itemQuery = this.client.CreateDocumentQuery<Item>( UriFactory.CreateDocumentCollectionUri("ToDoList", "Items"), "SELECT * FROM Items"); }
Der Rest ist ein Kinderspiel: Wir verbinden List & Label mit der Artikelabfrage und rufen den Designer auf:
using (ListLabel LL = new ListLabel()) { LL.DataSource = itemQuery; LL.Design(); }
Anschließend die Artikelfelder suchen und schnell per Drag & Drop einen Bericht erstellen:
Das alles ist in weniger als 30 Minuten erledigt, inklusive Einrichtung – super Sache! So was nennen wir intern „Freitagnachmittagsprojekte“. TGIF