Azure Tables-Clientbibliothek für .NET– Version 12.8.1
Azure Table Storage ist ein Dienst, der große Mengen strukturierter NoSQL-Daten in der Cloud speichert und einen Schlüssel-/Attributspeicher mit einem schemalosen Entwurf bereitstellt.
Azure Cosmos DB bietet eine Tabellen-API für Anwendungen, die für Azure Table Storage geschrieben wurden und Premium-Funktionen benötigen, z. B.:
- Globale, sofort einsatzbereite Verteilung
- Dedizierter Durchsatz weltweit.
- Einstellige Latenzzeiten im Millisekundenbereich im 99. Perzentil.
- Garantierte Hochverfügbarkeit.
- Automatische sekundäre Indizierung
Die Azure Tables-Clientbibliothek kann nahtlos auf Azure Table Storage- oder Azure Cosmos DB-Tabellendienstendpunkte ohne Codeänderungen ausgerichtet werden.
Quellcode | Paket (NuGet) | API-Referenzdokumentation | Proben | Änderungsprotokoll
Erste Schritte
Installieren des Pakets
Installieren Sie die Azure Tables-Clientbibliothek für .NET mit NuGet:
dotnet add package Azure.Data.Tables
Voraussetzungen
- Ein Azure-Abonnement.
- Ein vorhandenes Azure-Speicherkonto oder eine Azure Cosmos DB-Datenbank mit angegebener Azure-Tabellen-API.
Wenn Sie eine dieser Optionen erstellen müssen, können Sie die Azure CLI verwenden.
Erstellen eines Speicherkontos
Erstellen Sie ein Speicherkonto mystorageaccount
in der Ressourcengruppe MyResourceGroup
im Abonnement MySubscription
in der Region "USA, Westen".
az storage account create -n mystorageaccount -g MyResourceGroup -l westus --subscription MySubscription
Erstellen einer Cosmos DB-Instanz
Erstellen Sie ein Cosmos DB-Konto MyCosmosDBDatabaseAccount
in der Ressourcengruppe MyResourceGroup
im Abonnement MySubscription
und eine Tabelle namens MyTableName
im Konto.
az cosmosdb create --name MyCosmosDBDatabaseAccount --capabilities EnableTable --resource-group MyResourceGroup --subscription MySubscription
az cosmosdb table create --name MyTableName --resource-group MyResourceGroup --account-name MyCosmosDBDatabaseAccount
Authentifizieren des Clients
Weitere Informationen zu Authentifizierungsoptionen (einschließlich Verbindungszeichenfolgen, freigegebener Schlüssel, Shared Key Signatures und TokenCredentials)finden Sie in unseren Beispielen.
Wichtige Begriffe
TableServiceClient
- Client, der Methoden für die Interaktion auf Tabellendienstebene bereitstellt, z. B. Erstellen, Auflisten und Löschen von TabellenTableClient
- Client, der Methoden für die Interaktion auf Tabellenentitätsebene bereitstellt, z. B. erstellen, abfragen und löschen von Entitäten innerhalb einer Tabelle.Table
– Tabellen speichern Daten als Sammlungen von Entitäten.Entity
- Entitäten ähneln Zeilen. Eine Entität besitzt einen Primärschlüssel und einen Satz von Eigenschaften. Eine Eigenschaft ist ein Name-Wert-Paar, ähnlich einer Spalte.
Der Tabellenspeicherdienst wird hauptsächlich für folgende Zwecke verwendet:
- Speicherung strukturierter Daten in TB-Größe zur Verarbeitung webbasierter Anwendungen
- Speichern von Datasets, die keine komplexen Joins, Fremdschlüssel oder gespeicherten Prozeduren erfordern und für den schnellen Zugriff denormisiert werden können
- Schnelle Datenabfrage mithilfe eines gruppierten Index
- Zugreifen auf Daten mit dem OData-Protokoll und LINQ-Filterausdrücken
Threadsicherheit
Wir garantieren, dass alle Client-instance Methoden threadsicher und unabhängig voneinander sind (Richtlinie). Dadurch wird sichergestellt, dass die Empfehlung, Clientinstanzen wiederzuverwenden, immer sicher ist, auch über Threads hinweg.
Zusätzliche Konzepte
Clientoptionen | Zugreifen auf die Antwort | Vorgänge | mit langer AusführungsdauerBehandeln von Fehlern | Diagnose | Spott | Clientlebensdauer
Beispiele
Erstellen des Tabellenspeicherdienst-Clients
Zunächst müssen wir einen TableServiceClient
erstellen.
// Construct a new "TableServiceClient using a TableSharedKeyCredential.
var serviceClient = new TableServiceClient(
new Uri(storageUri),
new TableSharedKeyCredential(accountName, storageAccountKey));
Erstellen einer Azure-Tabelle
Als Nächstes können wir eine neue Tabelle erstellen.
// Create a new table. The TableItem class stores properties of the created table.
TableItem table = serviceClient.CreateTableIfNotExists(tableName);
Console.WriteLine($"The created table's name is {table.Name}.");
Abrufen einer Azure-Tabelle
Bei den vorhandenen Azure-Tabellen können Abfragen mit einem OData-Filter verwendet werden.
// Use the <see cref="TableServiceClient"> to query the service. Passing in OData filter strings is optional.
Pageable<TableItem> queryTableResults = serviceClient.Query(filter: $"TableName eq '{tableName}'");
Console.WriteLine("The following are the names of the tables in the query results:");
// Iterate the <see cref="Pageable"> in order to access queried tables.
foreach (TableItem table in queryTableResults)
{
Console.WriteLine(table.Name);
}
Löschen einer Azure-Tabelle
Einzelne Tabellen können aus dem Dienst gelöscht werden.
// Deletes the table made previously.
serviceClient.DeleteTable(tableName);
Erstellen des Tabellenclients
Um mit Tabellenentitäten zu interagieren, müssen wir zuerst eine TableClient
erstellen.
// Construct a new <see cref="TableClient" /> using a <see cref="TableSharedKeyCredential" />.
var tableClient = new TableClient(
new Uri(storageUri),
tableName,
new TableSharedKeyCredential(accountName, storageAccountKey));
// Create the table in the service.
tableClient.Create();
Hinzufügen von Tabellenentitäten
Definieren wir ein neues TableEntity
, damit wir es der Tabelle hinzufügen können.
// Make a dictionary entity by defining a <see cref="TableEntity">.
var tableEntity = new TableEntity(partitionKey, rowKey)
{
{ "Product", "Marker Set" },
{ "Price", 5.00 },
{ "Quantity", 21 }
};
Console.WriteLine($"{tableEntity.RowKey}: {tableEntity["Product"]} costs ${tableEntity.GetDouble("Price")}.");
Mithilfe von TableClient
können wir jetzt der Tabelle unsere neue Entität hinzufügen.
// Add the newly created entity.
tableClient.AddEntity(tableEntity);
Zum Abfragen von Tabellenentitäten
Um den Satz vorhandener Tabellenentitäten zu untersuchen, können wir die Tabelle mithilfe eines OData-Filters abfragen.
Pageable<TableEntity> queryResultsFilter = tableClient.Query<TableEntity>(filter: $"PartitionKey eq '{partitionKey}'");
// Iterate the <see cref="Pageable"> to access all queried entities.
foreach (TableEntity qEntity in queryResultsFilter)
{
Console.WriteLine($"{qEntity.GetString("Product")}: {qEntity.GetDouble("Price")}");
}
Console.WriteLine($"The query returned {queryResultsFilter.Count()} entities.");
Wenn Sie Abfrageausdrücke im LINQ-Stil bevorzugen, können wir die Tabelle auch mit dieser Syntax abfragen. Um diese Syntax zu veranschaulichen, benötigen Sie ein stark typisiertes Modell wie das folgende:
// Define a strongly typed entity by implementing the ITableEntity interface.
public class OfficeSupplyEntity : ITableEntity
{
public string Product { get; set; }
public double Price { get; set; }
public int Quantity { get; set; }
public string PartitionKey { get; set; }
public string RowKey { get; set; }
public DateTimeOffset? Timestamp { get; set; }
public ETag ETag { get; set; }
}
Bei dieser Modellklassendefinition wird beschrieben, wie Sie eine Abfrage schreiben würden:
double priceCutOff = 6.00;
Pageable<OfficeSupplyEntity> queryResultsLINQ = tableClient.Query<OfficeSupplyEntity>(ent => ent.Price >= priceCutOff);
Löschen von Tabellenentitäten
Wenn die neue Tabellenentität nicht mehr benötigt wird, kann sie gelöscht werden.
// Delete the entity given the partition and row key.
tableClient.DeleteEntity(partitionKey, rowKey);
Problembehandlung
Bei Verwendung der Azure-Tabellenbibliothek werden vom Dienst zurückgegebene Fehler mithilfe der gleichen HTTP-status-Codes gemeldet, die für REST-API-Anforderungen zurückgegeben werden.
Wenn Sie beispielsweise versuchen, eine bereits vorhandene Tabelle zu erstellen, wird ein 409
Fehler zurückgegeben, der auf "Conflict" hinweist.
// Construct a new TableClient using a connection string.
var client = new TableClient(
connectionString,
tableName);
// Create the table if it doesn't already exist.
client.CreateIfNotExists();
// Now attempt to create the same table unconditionally.
try
{
client.Create();
}
catch (RequestFailedException ex) when (ex.Status == (int)HttpStatusCode.Conflict)
{
Console.WriteLine(ex.ToString());
}
Einrichten der Konsolenprotokollierung
Die einfachste Möglichkeit, die Protokolle anzuzeigen, besteht darin, die Konsolenprotokollierung zu aktivieren. Verwenden Sie die AzureEventSourceListener.CreateConsoleLogger-Methode, um einen Azure SDK-Protokolllistener zu erstellen, der Nachrichten an die Konsole ausgibt.
// Setup a listener to monitor logged events.
using AzureEventSourceListener listener = AzureEventSourceListener.CreateConsoleLogger();
Weitere Informationen zu anderen Protokollierungsmechanismen finden Sie hier.
Nächste Schritte
Erste Schritte mit unseren Tabellenbeispielen.
Bekannte Probleme
Eine Liste der derzeit bekannten Probleme im Zusammenhang mit Cosmos DB-Tabellenendpunkten finden Sie hier.
Mitwirken
Beiträge und Vorschläge für dieses Projekt sind willkommen. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. Weitere Informationen finden Sie unter cla.microsoft.com.
Für dieses Projekt gelten die Microsoft-Verhaltensregeln für Open Source (Microsoft Open Source Code of Conduct). Weitere Informationen finden Sie in den häufig gestellten Fragen zum Verhaltenskodex. Sie können sich auch an opencode@microsoft.com wenden, wenn Sie weitere Fragen oder Anmerkungen haben.