Verwenden einer Azure Cosmos DB-Dokumentdatenbank in Xamarin.Forms
Eine Azure Cosmos DB-Dokumentdatenbank ist eine NoSQL-Datenbank, die einen schnellen, hochverwendbaren, skalierbaren Datenbankdienst für Anwendungen bietet, die eine nahtlose Skalierung und globale Replikation erfordern. In diesem Artikel wird erläutert, wie Sie die Azure Cosmos DB .NET Standard-Clientbibliothek verwenden, um eine Azure Cosmos DB-Dokumentdatenbank in eine Xamarin.Forms Anwendung zu integrieren.
Microsoft Azure Cosmos DB-Video
Ein Azure Cosmos DB-Dokumentdatenbankkonto kann mit einem Azure-Abonnement bereitgestellt werden. Jedes Datenbankkonto kann null oder mehr Datenbanken haben. Eine Dokumentdatenbank in Azure Cosmos DB ist ein logischer Container für Dokumentsammlungen und Benutzer.
Eine Azure Cosmos DB-Dokumentdatenbank kann null oder mehr Dokumentsammlungen enthalten. Jede Dokumentauflistung kann eine andere Leistungsstufe aufweisen, sodass mehr Durchsatz für häufig verwendete Auflistungen und weniger Durchsatz für selten aufgerufene Auflistungen angegeben werden kann.
Jede Dokumentsammlung besteht aus null oder mehr JSON-Dokumenten. Dokumente in einer Auflistung sind schemafrei und müssen daher nicht dieselbe Struktur oder Felder gemeinsam nutzen. Wenn Dokumente zu einer Dokumentsammlung hinzugefügt werden, indiziert Azure Cosmos DB sie automatisch und sind verfügbar, um abgefragt zu werden.
Für Entwicklungszwecke kann eine Dokumentdatenbank auch über einen Emulator genutzt werden. Mithilfe des Emulators können Anwendungen lokal entwickelt und getestet werden, ohne ein Azure-Abonnement zu erstellen oder kostenaufwendigen zu müssen. Weitere Informationen zum Emulator finden Sie unter Developing lokal with the Azure Cosmos DB Emulator.
In diesem Artikel und der zugehörigen Beispielanwendung wird eine Todo-Listenanwendung veranschaulicht, in der die Aufgaben in einer Azure Cosmos DB-Dokumentdatenbank gespeichert werden. Weitere Informationen zur Beispielanwendung finden Sie unter Grundlegendes zum Beispiel.
Weitere Informationen zu Azure Cosmos DB finden Sie in der Azure Cosmos DB-Dokumentation.
Hinweis
Wenn Sie kein Azure-Abonnement besitzen, erstellen Sie ein kostenloses Konto, bevor Sie beginnen.
Setup
Der Prozess für die Integration einer Azure Cosmos DB-Dokumentdatenbank in eine Xamarin.Forms Anwendung lautet wie folgt:
- Erstellung eines Azure Cosmos DB-Kontos. Weitere Informationen finden Sie unter Erstellen eines Azure Cosmos DB-Kontos.
- Fügen Sie das NuGet-Paket der Azure Cosmos DB .NET Standard-Clientbibliothek zu den Plattformprojekten in der Xamarin.Forms Lösung hinzu.
- Fügen Sie
using
Direktiven für dieMicrosoft.Azure.Documents
Microsoft.Azure.Documents.Client
Klassen undMicrosoft.Azure.Documents.Linq
Namespaces hinzu, die auf das Azure Cosmos DB-Konto zugreifen.
Nachdem Sie diese Schritte ausgeführt haben, kann die Azure Cosmos DB .NET Standard-Clientbibliothek verwendet werden, um Anforderungen für die Dokumentdatenbank zu konfigurieren und auszuführen.
Hinweis
Die Azure Cosmos DB .NET Standard-Clientbibliothek kann nur in Plattformprojekten und nicht in einem PCL-Projekt (Portable Class Library) installiert werden. Daher ist die Beispielanwendung ein Shared Access Project (SAP), um Codeduplizierungen zu vermeiden. Die Klasse kann jedoch in einem PCL-Projekt verwendet werden, DependencyService
um Azure Cosmos DB .NET Standard-Clientbibliothekscode in plattformspezifischen Projekten aufzurufen.
Verwenden des Azure Cosmos DB-Kontos
Der DocumentClient
Typ kapselt den Endpunkt, die Anmeldeinformationen und die Verbindungsrichtlinie, die für den Zugriff auf das Azure Cosmos DB-Konto verwendet wird, und wird verwendet, um Anforderungen für das Konto zu konfigurieren und auszuführen. Im folgenden Codebeispiel wird veranschaulicht, wie eine Instanz dieser Klasse erstellt wird:
DocumentClient client = new DocumentClient(new Uri(Constants.EndpointUri), Constants.PrimaryKey);
Der Azure Cosmos DB-Uri und der Primärschlüssel müssen dem DocumentClient
Konstruktor bereitgestellt werden. Diese können über das Azure-Portal abgerufen werden. Weitere Informationen finden Sie unter Verbinden zu einem Azure Cosmos DB-Konto.
Erstellen einer Datenbank
Eine Dokumentdatenbank ist ein logischer Container für Dokumentsammlungen und Benutzer und kann im Azure-Portal oder programmgesteuert mithilfe der DocumentClient.CreateDatabaseIfNotExistsAsync
Methode erstellt werden:
public async Task CreateDatabase(string databaseName)
{
...
await client.CreateDatabaseIfNotExistsAsync(new Database
{
Id = databaseName
});
...
}
Die CreateDatabaseIfNotExistsAsync
Methode gibt ein Database
Objekt als Argument an, wobei das Database
Objekt den Datenbanknamen als Id
Eigenschaft angibt. Die CreateDatabaseIfNotExistsAsync
Methode erstellt die Datenbank, wenn sie nicht vorhanden ist, oder gibt die Datenbank zurück, wenn sie bereits vorhanden ist. Die Beispielanwendung ignoriert jedoch alle von der CreateDatabaseIfNotExistsAsync
Methode zurückgegebenen Daten.
Hinweis
Die CreateDatabaseIfNotExistsAsync
Methode gibt ein Task<ResourceResponse<Database>>
Objekt zurück, und der Statuscode der Antwort kann überprüft werden, um zu bestimmen, ob eine Datenbank erstellt oder eine vorhandene Datenbank zurückgegeben wurde.
Erstellen einer Dokumentsammlung
Eine Dokumentsammlung ist ein Container für JSON-Dokumente und kann im Azure-Portal oder programmgesteuert mithilfe der DocumentClient.CreateDocumentCollectionIfNotExistsAsync
Methode erstellt werden:
public async Task CreateDocumentCollection(string databaseName, string collectionName)
{
...
// Create collection with 400 RU/s
await client.CreateDocumentCollectionIfNotExistsAsync(
UriFactory.CreateDatabaseUri(databaseName),
new DocumentCollection
{
Id = collectionName
},
new RequestOptions
{
OfferThroughput = 400
});
...
}
Für die CreateDocumentCollectionIfNotExistsAsync
Methode sind zwei obligatorische Argumente erforderlich: ein datenbankname, der als ein Uri
Objekt angegeben ist DocumentCollection
. Das DocumentCollection
Objekt stellt eine Dokumentauflistung dar, deren Name mit der Id
Eigenschaft angegeben wird. Die CreateDocumentCollectionIfNotExistsAsync
Methode erstellt die Dokumentauflistung, wenn sie nicht vorhanden ist, oder gibt die Dokumentauflistung zurück, falls sie bereits vorhanden ist. Die Beispielanwendung ignoriert jedoch alle von der CreateDocumentCollectionIfNotExistsAsync
Methode zurückgegebenen Daten.
Hinweis
Die CreateDocumentCollectionIfNotExistsAsync
Methode gibt ein Task<ResourceResponse<DocumentCollection>>
Objekt zurück, und der Statuscode der Antwort kann überprüft werden, um zu bestimmen, ob eine Dokumentsammlung erstellt wurde oder eine vorhandene Dokumentauflistung zurückgegeben wurde.
Optional kann die CreateDocumentCollectionIfNotExistsAsync
Methode auch ein RequestOptions
Objekt angeben, das Optionen kapselt, die für Anforderungen angegeben werden können, die für das Azure Cosmos DB-Konto ausgestellt wurden. Die RequestOptions.OfferThroughput
Eigenschaft wird verwendet, um die Leistungsstufe der Dokumentsammlung zu definieren und in der Beispielanwendung auf 400 Anforderungseinheiten pro Sekunde festgelegt. Dieser Wert sollte erhöht oder verringert werden, je nachdem, ob die Sammlung häufig oder selten zugegriffen wird.
Wichtig
Beachten Sie, dass die CreateDocumentCollectionIfNotExistsAsync
Methode eine neue Auflistung mit einem reservierten Durchsatz erstellt, der Preisauswirkungen hat.
Abrufen von Dokumentensammlungsdokumenten
Der Inhalt einer Dokumentsammlung kann abgerufen werden, indem eine Dokumentabfrage erstellt und ausgeführt wird. Mit der DocumentClient.CreateDocumentQuery
Methode wird eine Dokumentabfrage erstellt:
public async Task<List<TodoItem>> GetTodoItemsAsync()
{
...
var query = client.CreateDocumentQuery<TodoItem>(collectionLink)
.AsDocumentQuery();
while (query.HasMoreResults)
{
Items.AddRange(await query.ExecuteNextAsync<TodoItem>());
}
...
}
Diese Abfrage ruft asynchron alle Dokumente aus der angegebenen Auflistung ab und platziert die Dokumente in einer List<TodoItem>
Auflistung zur Anzeige.
Die CreateDocumentQuery<T>
Methode gibt ein Uri
Argument an, das die Auflistung darstellt, die für Dokumente abgefragt werden soll. In diesem Beispiel ist die collectionLink
Variable ein Feld auf Klassenebene, das die Uri
Dokumentauflistung angibt, aus der Dokumente abgerufen werden sollen:
Uri collectionLink = UriFactory.CreateDocumentCollectionUri(Constants.DatabaseName, Constants.CollectionName);
Die CreateDocumentQuery<T>
Methode erstellt eine Abfrage, die synchron ausgeführt wird, und gibt ein IQueryable<T>
Objekt zurück. AsDocumentQuery
Die Methode konvertiert das IQueryable<T>
Objekt jedoch in ein IDocumentQuery<T>
Objekt, das asynchron ausgeführt werden kann. Die asynchrone Abfrage wird mit der IDocumentQuery<T>.ExecuteNextAsync
Methode ausgeführt, die die nächste Seite der Ergebnisse aus der Dokumentdatenbank abruft, wobei die IDocumentQuery<T>.HasMoreResults
Eigenschaft angibt, ob zusätzliche Ergebnisse aus der Abfrage zurückgegeben werden sollen.
Dokumente können serverseitig gefiltert werden, indem eine Where
Klausel in die Abfrage eingeschlossen wird, die ein Filter-Prädikat auf die Abfrage für die Dokumentsammlung anwendet:
var query = client.CreateDocumentQuery<TodoItem>(collectionLink)
.Where(f => f.Done != true)
.AsDocumentQuery();
Diese Abfrage ruft alle Dokumente aus der Auflistung ab, deren Done
Eigenschaft gleich false
ist.
Einfügen eines Dokuments in eine Dokumentsammlung
Dokumente sind benutzerdefinierte JSON-Inhalte und können mit der DocumentClient.CreateDocumentAsync
Methode in eine Dokumentsammlung eingefügt werden:
public async Task SaveTodoItemAsync(TodoItem item, bool isNewItem = false)
{
...
await client.CreateDocumentAsync(collectionLink, item);
...
}
Die CreateDocumentAsync
Methode gibt ein Uri
Argument an, das die Auflistung darstellt, in die das Dokument eingefügt werden soll, und ein object
Argument, das das einzufügende Dokument darstellt.
Ersetzen eines Dokuments in einer Dokumentsammlung
Dokumente können in einer Dokumentsammlung durch die DocumentClient.ReplaceDocumentAsync
Methode ersetzt werden:
public async Task SaveTodoItemAsync(TodoItem item, bool isNewItem = false)
{
...
await client.ReplaceDocumentAsync(UriFactory.CreateDocumentUri(Constants.DatabaseName, Constants.CollectionName, item.Id), item);
...
}
Die ReplaceDocumentAsync
Methode gibt ein Uri
Argument an, das das Dokument in der Auflistung darstellt, das ersetzt werden soll, und ein object
Argument, das die aktualisierten Dokumentdaten darstellt.
Löschen eines Dokuments aus einer Dokumentsammlung
Ein Dokument kann aus einer Dokumentsammlung mit der DocumentClient.DeleteDocumentAsync
Methode gelöscht werden:
public async Task DeleteTodoItemAsync(string id)
{
...
await client.DeleteDocumentAsync(UriFactory.CreateDocumentUri(Constants.DatabaseName, Constants.CollectionName, id));
...
}
Die DeleteDocumentAsync
Methode gibt ein Uri
Argument an, das das Dokument in der Auflistung darstellt, das gelöscht werden soll.
Löschen einer Dokumentsammlung
Eine Dokumentsammlung kann aus einer Datenbank mit der DocumentClient.DeleteDocumentCollectionAsync
Methode gelöscht werden:
await client.DeleteDocumentCollectionAsync(collectionLink);
Die DeleteDocumentCollectionAsync
Methode gibt ein Uri
Argument an, das die zu löschende Dokumentauflistung darstellt. Beachten Sie, dass das Aufrufen dieser Methode auch die in der Auflistung gespeicherten Dokumente löscht.
Löschen einer Datenbank
Eine Datenbank kann mit der DocumentClient.DeleteDatabaesAsync
Methode aus einem Azure Cosmos DB-Datenbankkonto gelöscht werden:
await client.DeleteDatabaseAsync(UriFactory.CreateDatabaseUri(Constants.DatabaseName));
Die DeleteDatabaseAsync
Methode gibt ein Uri
Argument an, das die zu löschende Datenbank darstellt. Beachten Sie, dass das Aufrufen dieser Methode auch die in der Datenbank gespeicherten Dokumentsammlungen und die in den Dokumentsammlungen gespeicherten Dokumente löscht.
Zusammenfassung
In diesem Artikel wird erläutert, wie Sie die Azure Cosmos DB .NET Standard-Clientbibliothek verwenden, um eine Azure Cosmos DB-Dokumentdatenbank in eine Xamarin.Forms Anwendung zu integrieren. Eine Azure Cosmos DB-Dokumentdatenbank ist eine NoSQL-Datenbank, die einen schnellen, hochverwendbaren, skalierbaren Datenbankdienst für Anwendungen bietet, die eine nahtlose Skalierung und globale Replikation erfordern.