Ausführen von Datenvorgängen für elastische Tabellen mithilfe von Code

In diesem Artikel wird beschrieben, wie Sie mit Code Datenvorgänge für elastic tables in Dataverse ausführen. Informationen zum Erstellen, Abrufen, Aktualisieren, Upsert, Löschen, Abfragen und Zuordnen von elastischen Tabelleneinträgen sowie zum Verwenden von Sitzungstoken, Partitions-ID-Werten und Massenvorgängen mit dem SDK für .NET oder Web-API.

Arbeiten Sie mit dem Sitzungstoken

Wie in der Konsistenzebene erwähnt, können Sie Konsistenz auf Sitzungsebene erzielen, indem Sie das aktuelle Sitzungstoken mit Ihren Anfragen übergeben. Wenn Sie das Sitzungstoken nicht einschließen, enthalten die abgerufenen Daten möglicherweise keine Datenänderungen, die Sie gerade vorgenommen haben.

Abrufen des Sitzungstokens

Das Sitzungstoken ist in der Antwort auf alle Schreibvorgänge verfügbar. Suchen Sie nach dem x-ms-session-tokenWert.

Für jede OrganizationResponse für einen Schreibvorgang können Sie den x-ms-session-token-Wert in der Sammlung Results erfassen.

Anmerkung

DeleteResponse gibt aktuell nicht den Wert x-ms-session-token zurück. Weitere Informationen finden Sie unter Bekanntes Problem: Für Löschvorgänge wird kein x-ms-session-token-Wert zurückgegeben.

string sessionToken = response.Results["x-ms-session-token"].ToString();

Sitzungstoken senden

Die Methode zum Senden des Sitzungstokens in einem Lesevorgang hängt davon ab, ob Sie das SDK oder die Web-API verwenden.

Wenn Sie einen Vorgang durchführen, der Daten abruft, legen Sie den optionalen Parameter in OrganizationRequest fest.

var request = new RetrieveRequest
{
    Target = new EntityReference("contoso_sensordata", sensordataid),
    ColumnSet = new ColumnSet("contoso_value"),
    ["partitionId"] = deviceId,
    ["SessionToken"] = sessionToken
};

Weitere Informationen zur Verwendung optionaler Parameter.

PartitionId angeben

Wie in Partitionierung und horizontaler Skalierung erwähnt, verfügt jede elastische Tabelle über eine partitionid Spalte, die Sie verwenden müssen, wenn Sie eine Partitionierungsstrategie für die Tabelle anwenden möchten. Legen Sie andernfalls keinen Wert für die Spalte partitionid fest.

Wichtig

Wenn Sie sich für die Verwendung einer Partitionierungsstrategie für Ihre elastische Tabelle entscheiden, MÜSSEN alle Vorgänge für diese Tabelle bzw. alle Vorgänge, die sich auf Datensätze in dieser Tabelle beziehen, den partitionid-Spaltenwert zur eindeutigen Identifizierung des Datensatzes angeben. Es gibt keinen Fehler, wenn Sie den Nachschlagewert partitionid der Referenztabelle nicht angeben, aber die Suche kann den Datensatz nicht finden, wenn Sie ihn verwenden. Sie müssen diese Anforderung über Codeüberprüfungen dokumentieren und erzwingen, um sicherzustellen, dass Ihre Daten konsistent sind und partitionid für alle Vorgänge angemessen verwendet werden.

Nachdem Sie beim Erstellen einer Zeile einen Nicht-Null-Wert für die Spalte partitionid angegeben haben, müssen Sie die Spalte partitionid auch bei allen anderen Datenvorgängen für diese Zeile angeben. Sie können den Wert später nicht ändern.

Wenn Sie bei der Erstellung eines Datensatzes keinen partitionid-Wert festlegen, bleibt der Wert der Spalte partitionid NULL und kann später nicht mehr geändert werden. In diesem Fall können Sie die Datensätze anhand des Primärschlüssels identifizieren, wie Sie es normalerweise bei Standardtabellen tun. Die Angabe eines partitionid-Werts ist nicht erforderlich.

Anmerkung

Die Beispiele in diesem Artikel gehen davon aus, dass Sie für die Spalte partitionid einen Nicht-Null-Wert angeben.

Sie können den Wert partitionid auf folgende Arten festlegen, wenn Sie verschiedene Vorgänge mit Daten durchführen.

Verwenden Sie die Alternativtaste

Wie in alternativen Schlüsseln erwähnt, verfügt jede elastische Tabelle über einen alternativen Schlüssel mit dem Namen KeyForNoSqlEntityWithPKPartitionId. Dieser alternative Schlüssel kombiniert den Primärschlüssel der Tabelle mit der Spalte partitionid.

Wenn Sie eine Partitionierungsstrategie verwenden, müssen Sie einen alternativen Schlüssel angeben, um den Wert partitionid anzugeben, wenn Sie Vorgänge mit Update, Retrieve oder Delete verwenden oder wenn Sie eine Nachschlagespalte für eine andere Tabelle festlegen, die sich auf einen Datensatz in einer elastischen Tabelle bezieht.

Dieses Beispiel zeigt, wie Sie den Alternativschlüssel zur Angabe des partitionid-Werts verwenden können, wenn Sie Retrieve-, Update- und Delete-Anforderungen für elastische Tabellen verwenden.

var keys = new KeyAttributeCollection() {
    { "contoso_sensordataid", sensordataid },
    { "partitionid", deviceId }
};

var entity = new Entity("contoso_sensordata", keys)

Verwenden Sie den partitionId-Parameter

Derzeit können Sie mit dem Parameter partitionId den Wert der Spalte partitionid nur für die Vorgänge Retrieve und Delete angeben. Weitere Informationen finden Sie unter Bekanntes Problem: Der optionale Parameter partitionId ist nicht für alle Nachrichten verfügbar.

Anmerkung

Der partitionId Parameter funktioniert nicht mit Create, Update oder Upsert Nachrichten, und der Dienst ignoriert ihn, wenn Sie ihn senden.

request["partitionId"] = "device-001"

Verwenden Sie die Partitionid-Spalte direkt

Für Create-, Upsert- oder Update-Vorgänge können Sie den Wert der Spalte partitionid direkt angeben.

Dieses Beispiel zeigt, wie Sie den Wert der Spalte partitionid in Entity direkt angeben können, wenn Sie einen Create-, Upsert- oder Update-Vorgang ausführen.

var entity = new Entity("contoso_sensordata", sensordataid)
{
    Attributes = {
        { "partitionid", "device-001" }
    }
};

Erstellen Sie einen Datensatz in einer Elastic-Tabelle

In diesem Beispiel wird eine Zeile in der contoso_SensorData-Tabelle erstellt, wobei Sie partitionid auf deviceid setzen. Es legt auch die Spalte ttlinseconds fest, um sicherzustellen, dass der Datensatz nach einem Tag (86.400 Sekunden) abläuft und automatisch aus Dataverse gelöscht wird.

Dieses Beispiel erfasst auch den x-ms-session-token-Wert, den Sie beim Abrufen des erstellten Datensatzes verwenden können.

/// <summary>
/// Demonstrates creating a record with a partitionid and capturing the session token
/// </summary>
/// <param name="service">Authenticated client implementing the IOrganizationService interface</param>
/// <param name="deviceId">The value used as partitionid for the contoso_sensordata table. </param>
/// <param name="sessionToken">The current session token</param>
/// <returns>The Id of the created record.</returns>
public static Guid CreateExample(
    IOrganizationService service, 
    string deviceId, 
    ref string sessionToken )
{
    var entity = new Entity("contoso_sensordata")
    {
        Attributes =
            {
                { "contoso_deviceid", deviceId },
                { "contoso_sensortype", "Humidity" },
                { "contoso_value", 40 },
                { "contoso_timestamp", DateTime.UtcNow},
                { "partitionid", deviceId },
                { "ttlinseconds", 86400  }  // 86400  seconds in a day
            }
    };

    var request = new CreateRequest { 
        Target = entity
    };

    var response = (CreateResponse)service.Execute(request);

    // Capture the session token
    sessionToken = response.Results["x-ms-session-token"].ToString();

    return response.id;
}

Verwenden Sie den zurückgegebenen SessionToken Wert, um den x-ms-session-token optionalen Parameter festzulegen, wenn Sie den von Ihnen erstellten Datensatz abrufen. Erfahren Sie mehr über das Senden des Sitzungstokens.

Anmerkung

Elastische Tabellen unterstützen keine Deep Inserts. Sie müssen jeden verknüpften Datensatz unabhängig voneinander erstellen. Nur Standardtabellen unterstützen Deep Insert.

Festlegen des Primärschlüsselwerts

Wenn Sie keinen Primärschlüsselwert angeben, legt Dataverse einen Primärschlüsselwert für den Datensatz fest, wenn Sie ihn erstellen. Es ist üblich, Dataverse zu erlauben, diesen Wert festzulegen. Bei Bedarf können Sie den Primärschlüsselwert angeben. Bei elastischen Tabellen gibt es keinen Leistungsvorteil, wenn Sie Dataverse erlauben, den Primärschlüsselwert festzulegen.

Dataverse speichert Primärschlüsseldaten in Telemetrie, um die Wartung des Diensts zu unterstützen. Wenn Sie benutzerdefinierte Primärschlüsselwerte angeben, verwenden Sie in diesen Werten keine vertraulichen Informationen.

Elastische Tabellen geben keinen Fehler zurück, wenn Sie einen Datensatz mit einem Primärschlüsselwert erstellen, der nicht eindeutig ist. Durch Festlegen der Primärschlüsselwerte mit elastischen Tabellen können Sie Datensätze erstellen, die dieselben Primärschlüsselwerte, aber unterschiedliche partitionid-Werte haben. Dieses Muster ist jedoch nicht mit Power Apps kompatibel. Erstellen Sie keine Datensätze mit doppelten Primärschlüsselwerten, wenn Benutzende diese Daten in Canvas- oder modellgesteuerten Apps verwenden müssen.

Aktualisieren eines Datensatzes in einer elastischen Tabelle

Dieses Beispiel aktualisiert die Werte contoso_value und contoso_timestamp einer bestehenden Zeile in der Tabelle contoso_SensorData unter Verwendung von contoso_sensordataid als Primärschlüssel und partitionid = 'device-001'.

Wenn Sie eine Partitionierungsstrategie verwenden, sind der Primärschlüssel und die Spalten partitionid erforderlich, um eine vorhandene Zeile der elastischen Tabelle eindeutig zu identifizieren. Sie können den partitionid Wert einer vorhandenen Zeile nicht aktualisieren. Verwenden Sie sie nur, um die zu aktualisierende Zeile eindeutig zu identifizieren.

In diesem Beispiel wird der alternative Schlüssel KeyForNoSqlEntityWithPKPartitionId verwendet, um den Datensatz sowohl mit dem Primärschlüssel als auch mit dem partitionid-Wert eindeutig zu identifizieren. Weitere Informationen zu alternativen Tasten.

Dieses Beispiel zeigt die Verwendung des Werts partitionid als alternativen Schlüssel.

/// <summary>
/// Demonstrates updating elastic table row with partitionid as alternate key.
/// </summary>
/// <param name="service">Authenticated client implementing the IOrganizationService interface</param>
/// <param name="sensordataid">The unique identifier of the contoso_sensordata table.</param>
/// <param name="deviceId">The value used as partitionid for the contoso_sensordata table. </param>
/// <param name="sessionToken">The current session token</param>
public static void UpdateExample(
    IOrganizationService service, 
    Guid sensordataid, 
    string deviceId, 
    ref string sessionToken)
{
    var keys = new KeyAttributeCollection() {
        { "contoso_sensordataid", sensordataid },
        { "partitionid", deviceId }
    };

    var entity = new Entity("contoso_sensordata", keys)
    {
        Attributes = {
            { "contoso_value", 60 },
            { "contoso_timestamp", DateTime.UtcNow }
        }
    };

    var request = new UpdateRequest { 
        Target = entity,
        ["SessionToken"] = sessionToken
    };

    var response = (UpdateResponse)service.Execute(request);

    // Capture the session token
    sessionToken = response.Results["x-ms-session-token"].ToString();
}

Weitere Informationen über die Verwendung der Entity-Klasse zum Festlegen von Alternativschlüsseln.

Abrufen eines Datensatzes in einer elastischen Tabelle

Wenn Sie den partitionid Wert beim Erstellen eines elastischen Tabellendatensatzes festlegen, verwenden Sie ihn zusammen mit dem Primärschlüsselwert, um einen Datensatz eindeutig zu identifizieren.

Wenn Sie den partitionid-Wert nicht festlegen, rufen Sie den Datensatz nur mit dem Primärschlüsselwert ab.

Um einen Datensatz mithilfe des partitionid Werts abzurufen, verfassen Sie Ihre Anforderung auf eine der folgenden Arten.

In diesem Beispiel wird die RetrieveRequest-Klasse verwendet. Legen Sie die Target Eigenschaft auf eine von Ihnen erstellte EntityReference fest, indem Sie den Konstruktor verwenden, der eine KeyAttributeCollection akzeptiert, um die EntityReference mit dem KeyForNoSqlEntityWithPKPartitionId alternativen Schlüssel zu erstellen. Weitere Informationen über die Verwendung der EntityReference-Klasse mit Alternativschlüsseln.

public static void RetrieveExampleAlternateKey(IOrganizationService service, Guid sensorDataId, string deviceId) {

    var keys = new KeyAttributeCollection() {
        { "contoso_sensordataid", sensorDataId },
        { "partitionid", deviceId }
    };

    var entityReference = new EntityReference("contoso_sensordata", keys);

    var request = new RetrieveRequest { 
        ColumnSet = new ColumnSet("contoso_value"),
        Target = entityReference
    };

    var response = (RetrieveResponse)service.Execute(request);

    Console.WriteLine($"contoso_value: {response.Entity.GetAttributeValue<int>("contoso_value")}");
}

In diesem Beispiel wird ein optionaler Parameter namens in der partitionId verwendet. Weitere Informationen zur Verwendung optionaler Parameter.

public static void RetrieveExampleOptionalParameter(IOrganizationService service, Guid sensorDataId, string deviceId)
{
    var entityReference = new EntityReference("contoso_sensordata", sensorDataId);

    var request = new RetrieveRequest
    {
        ColumnSet = new ColumnSet("contoso_value"),
        Target = entityReference,
        ["partitionId"] = deviceId
    };

    var response = (RetrieveResponse)service.Execute(request);

    Console.WriteLine($"contoso_value: {response.Entity.GetAttributeValue<int>("contoso_value")}");
}

Abfragen von Zeilen einer elastischen Tabelle

Wenn Sie die Zeilen einer elastischen Tabelle abfragen, erzielen Sie die beste Leistung, wenn Sie Ihre Abfrage auf eine bestimmte Partition beschränken. Andernfalls gibt Ihre Abfrage Daten über alle logischen Partitionen zurück, was nicht so schnell ist.

Anmerkung

Wenn Sie diesen Ansatz verwenden, muss der Parameter den Namen partitionId (mit einem Großbuchstaben I) anstelle von partitionid (alles in Kleinbuchstaben) verwenden.

Wenn Sie einen Filter auf diese Weise angeben, müssen Sie die Filterkriterien für partitionid in Ihrer Abfrage nicht auf die übliche Weise angeben (d. h. mithilfe von FetchXML condition, QueryExpression, ConditionExpression oder der Web-API $filter).

Die übliche Angabe eines Filters für den Wert partitionid hat nicht die gleichen Leistungsvorteile wie die Angabe über den Parameter partitionId, wie in den folgenden Beispielen gezeigt.

Diese Beispiele rufen die ersten 500 Zeilen in der Tabelle contoso_SensorData ab, die zur logischen Partition gehören, für die partitionid = 'deviceid-001' gilt.

public static EntityCollection RetrieveMultipleExample(IOrganizationService service)
{
    var request = new RetrieveMultipleRequest
    {
        Query = new QueryExpression("contoso_sensordata")
        {
            ColumnSet = new ColumnSet("contoso_value")
        },
        ["partitionId"] = "deviceid-001"
    };

    var response = (RetrieveMultipleResponse)service.Execute(request);
    return response.EntityCollection;
}

Bei der Ausführung einer Abfrage unterstützen Elastic-Tabellen das Zurückgeben verwandter Zeilen derzeit nicht. Wenn Sie versuchen, verwandte Zeilen zurückzugeben, wird von Dataverse ein Fehler mit dem Code 0x80048d0b und der folgenden Meldung ausgegeben:

Link entities are not supported.

Elastische Tabellen unterstützen jedoch das Zurückgeben verwandter Zeilen, wenn Sie eine einzelne Zeile abrufen.

Einen Datensatz in einer elastischen Tabelle per Upsert einfügen oder aktualisieren

Wichtig

Upsert-Vorgänge mit elastischen Tabellen unterscheiden sich von Upsert-Vorgängen mit Standardtabellen. Upsert-Vorgänge müssen die vollständige Nutzlast enthalten und vorhandene Datensatzdaten überschreiben. Sie rufen die Create- oder Update-Nachrichten nicht an. Weitere Informationen zum Upsert für elastische Tabellen.

Wenn bei elastischen Tabellen ein Datensatz mit einer bestimmten ID und partitionid nicht vorhanden ist, wird er erstellt. Wenn es bereits vorhanden ist, wird es ersetzt.

Dieses Beispiel führt einen Upsert für eine Zeile in der contoso_SensorData-Tabelle mit dem angegebenen Wert id und partitionid = deviceid-001 aus.

/// <summary>
/// Demonstrates an upsert operation
/// </summary>
/// <param name="service">Authenticated client implementing the IOrganizationService interface</param>
/// <param name="id">The id of the record to update or create.</param>
/// <param name="sessionToken">The current session token</param>
/// <returns>Whether a record was created or not</returns>
public static bool UpsertExample(IOrganizationService service, Guid id, ref string sessionToken)
{
    var entity = new Entity("contoso_sensordata", id)
    {
        Attributes = {
            { "contoso_deviceid", "deviceid-001" },
            { "contoso_sensortype", "Humidity" },
            { "contoso_value", 60 },
            { "contoso_timestamp", DateTime.UtcNow },
            { "partitionid", "deviceid-001" },
            { "ttlinseconds", 86400 }
        }
    };

    var request = new UpsertRequest
    {
        Target = entity,
        ["SessionToken"] = sessionToken
    };

    var response = (UpsertResponse)service.Execute(request);

    // Capture the session token
    sessionToken = response.Results["x-ms-session-token"].ToString();

    return response.RecordCreated;
}

Einen Datensatz in einer elastischen Tabelle löschen

Wenn Sie einen Datensatz löschen, der einen angepassten partitionid-Wert verwendet, müssen Sie den partitionid-Wert einschließen.

Dieses Beispiel löscht eine Zeile in der contoso_SensorData Tabelle mit der angegebenen ID und partitionid = 'deviceid-001'.

/// <summary>
/// Demonstrates a delete operation
/// </summary>
/// <param name="service">Authenticated client implementing the IOrganizationService interface</param>
/// <param name="sensordataid">The unique identifier of the contoso_sensordata table.</param>
/// <param name="sessionToken">The current session token</param>
public static void DeleteExample(
    IOrganizationService service, 
    Guid sensordataid, 
    ref string sessionToken)
{
    var request = new DeleteRequest
    {
        Target = new EntityReference("contoso_sensordata", sensordataid),
        ["partitionId"] = "deviceid-001"
    };

    var response = service.Execute(request);
    // Known issue: Value not currently being returned.
    // sessionToken = response.Results["x-ms-session-token"].ToString();
}

Datensätze aus Elastic-Tabellen verknüpfen

Wenn sich ein Tabellendatensatz auf einen elastischen Tabellendatensatz bezieht, bei dem der partitionid Spaltenwert null ist, können Sie einen Datensatz in dieser Tabelle einem elastischen Tabellendatensatz genauso wie Standarddatensätze zuordnen. Siehe SDK für .NET oder Web-API.

Wenn ein Tabellendatensatz auf einen Datensatz aus einer elastischen Tabelle verweist, für den der partitionid-Spaltenwert festgelegt ist, müssen Sie den partitionid-Spaltenwert des Datensatzes aus einer elastischen Tabelle einbeziehen, wenn Sie die Nachschlagespalte der verweisenden Tabelle festlegen. Dazu können Sie den Wert als Alternativschlüssel angeben.

Wie in Spalte „Partitionid-Wert“ in der verweisenden Tabelle beschrieben, wenn eine 1:n-Beziehung erstellt wird und die elastische Tabelle die verwiesene Tabelle ist, wird eine Zeichenfolgenspalte und eine Nachschlagespalte in der verweisenden Tabelle erstellt. In der Zeichenfolgenspalte wird der partitionid-Wert des referenzierten Datensatzes der elastischen Tabelle gespeichert.

Sie können sowohl die Nachschlage- als auch die Zeichenfolgenspaltenwerte mit ihren jeweiligen Werten festlegen, indem Sie:

  • eine Alternativschlüssel-Referenz verwenden, um nur das Lookup festzulegen
  • die beiden Spaltenwerte zusammen in einer Aktualisierung festlegen

Wie Sie dies tun, hängt davon ab, ob Sie das SDK für .NET oder Web-API verwenden.

In diesem Beispiel wird ein Datensatz aus der elastischen Tabelle contoso_SensorData mit der angegebenen ID und partitionid einem vorhandenen Kontodatensatz verknüpft, indem die Nachschlagespalte mit einem Alternativschlüssel festgelegt wird:

/// <summary>
/// Demonstrates associate to elastic table operation.
/// </summary>
/// <param name="service">Authenticated client implementing the IOrganizationService interface</param>
/// <param name="sensordataId">The unique identifier of the contoso_sensordata table.</param>
/// <param name="deviceId">The deviceId. PartitionId of sensor data record.</param>
/// <param name="accountId">The unique identifier of the account record to update.</param>
public static void AssociateAccountAlternateKeyExample(
    IOrganizationService service,
    Guid sensordataId,
    string deviceId,
    Guid accountId)
{
    var keys = new KeyAttributeCollection() {
        { "contoso_sensordataid", sensordataId },
        { "partitionid", deviceId }
    };

    var sensorDataReference = new EntityReference("contoso_sensordata", keys);

    Entity account = new("account", accountId)
    {
        Attributes =
            {
                {"contoso_sensordata", sensorDataReference}
            }
    };

    service.Update(account);
}

In diesem Beispiel wird ebenso vorgegangen, nur dass jetzt beide Spalten zusammen festgelegt werden:

/// <summary>
/// Demonstrates associate to elastic table operation.
/// </summary>
/// <param name="service">Authenticated client implementing the IOrganizationService interface</param>
/// <param name="sensordataId">The unique identifier of the contoso_sensordata table.</param>
/// <param name="deviceId">The deviceId. PartitionId of sensor data record.</param>
/// <param name="deviceId">The unique identifier of the account record to update.</param>
public static void AssociateAccountBothColumnsExample(
    IOrganizationService service,
    Guid sensordataId,
    string deviceId,
    Guid accountId)
{
    Entity account = new("account", accountId) {
        Attributes =
            {
                {"contoso_sensordata", new EntityReference("contoso_sensordata", sensordataId)},
                {"contoso_sensordatapid", deviceId }
            }
    };

    service.Update(account);
}

Im letzten Beispiel wird AssociateRequest verwendet, um eine Sammlung von account-Datensätzen demselben contoso_SensorData-Tabellendatensatz in einem Vorgang zuzuordnen.

/// <summary>
/// Demonstrates associating multiple accounts to a contoso_sensordata elastic table record
/// </summary>
/// <param name="service">Authenticated client implementing the IOrganizationService interface</param>
/// <param name="sensordataId">The unique identifier of the contoso_sensordata table.</param>
/// <param name="deviceId">The deviceId. PartitionId of sensor data record.</param>
/// <param name="relatedEntities">A collection of references to account records to associate to the contoso_sensordata elastic table record</param>
public static void AssociateMultipleElasticTableExample(
   IOrganizationService service,
   Guid sensordataId,
   string deviceId,
   EntityReferenceCollection relatedEntities)
{

   // The keys to the elastic table record including the partitionid
   var keys = new KeyAttributeCollection() {
         { "contoso_sensordataid", sensordataId },
         { "partitionid", deviceId }
   };

   AssociateRequest request = new()
   {
         Target = new EntityReference("contoso_sensordata", keys),
         Relationship = new Relationship("contoso_SensorData_contoso_SensorData_Acc"),
         RelatedEntities = relatedEntities
   };

   service.Execute(request);
}

Massenvorgänge mit elastischen Tabellen

Oft müssen Anwendungen in kurzer Zeit eine große Datenmenge in Dataverse importieren. Dataverse verfügt über eine Gruppe von Nachrichten, die darauf ausgelegt sind, einen hohen Durchsatz zu erzielen. Mit elastischen Tabellen kann der Durchsatz sogar höher sein.

Massenvorgänge werden hinsichtlich der Leistung optimiert, wenn mehrere Schreibvorgänge auf derselben Tabelle durchgeführt werden, indem ein Batch von Zeilen als Eingabe in einem einzigen Schreibvorgang verwendet wird. Erfahren Sie mehr über Meldungen zu Bulk Operation (Vorschauversion).

CreateMultiple mit elastischen Tabellen verwenden

Sie können die CreateMultiple Nachricht entweder mit dem SDK für .NET oder der Web-API verwenden.

In diesem Beispiel wird die CreateMultipleRequest-Klasse verwendet, um mehrere Zeilen in der contoso_SensorData Elastic-Tabelle zu erstellen.

public static Guid[] CreateMultiple(IOrganizationService service)
{
    string tableLogicalName = "contoso_sensordata";

    List<Microsoft.Xrm.Sdk.Entity> entityList =
    [
        new (tableLogicalName)
        {
            Attributes =
            {
                { "contoso_deviceId", "deviceid-001" },
                { "contoso_sensortype", "Humidity" },
                { "contoso_value", "40" },
                { "contoso_timestamp", "2023-05-01Z05:00:00"},
                { "partitionid", "deviceid-001" },
                { "ttlinseconds", 86400 }
            }
        },
        new (tableLogicalName)
        {
            Attributes =
            {
                { "contoso_deviceId", "deviceid-002" },
                { "contoso_sensortype", "Humidity" },
                { "contoso_value", "10" },
                { "contoso_timestamp", "2023-05-01Z09:30:00"},
                { "partitionid", "deviceid-002" },
                { "ttlinseconds", 86400 }
            }
        },
        new (tableLogicalName)
        {
            Attributes =
            {
                { "contoso_deviceId", "deviceid-002" },
                { "contoso_sensortype", "Pressure" },
                { "contoso_value", "20" },
                { "contoso_timestamp", "2023-05-01Z07:20:00"},
                { "partitionid", "deviceid-002" },
                { "ttlinseconds", 86400 }
            }
        }
    ];

    // Create an EntityCollection populated with the list of entities.
    EntityCollection entities = new(entityList)
    {
        EntityName = tableLogicalName
    };

    // Use CreateMultipleRequest
    CreateMultipleRequest createMultipleRequest = new()
    {
        Targets = entities,
    };

    var createMultipleResponse = (CreateMultipleResponse)service.Execute(createMultipleRequest);
    return createMultipleResponse.Ids;
}

Verwenden Sie UpdateMultiple mit elastischen Tabellen

Sie können die UpdateMultiple Nachricht entweder mit dem SDK für .NET oder der Web-API verwenden.

In diesem Beispiel wird die UpdateMultipleRequest-Klasse verwendet, um mehrere Zeilen der contoso_SensorData Elastic Table zu aktualisieren. Diese Aktualisierung legt die Spalte contoso_value fest.

public static void UpdateMultiple(IOrganizationService service)
{
    string tableLogicalName = "contoso_sensordata";

    List<Microsoft.Xrm.Sdk.Entity> entityList =
    [
        new(tableLogicalName, new Guid("6114ca58-0928-ee11-9965-6045bd5cd155"))
        {
            Attributes =
            {
                { "contoso_value", "45" },
                { "partitionid", "deviceid-001" }
            }
        },
        new(tableLogicalName, new Guid("6214ca58-0928-ee11-9965-6045bd5cd155"))
        {
            Attributes =
            {
                { "contoso_value", "15" },
                { "partitionid", "deviceid-002" }
            }
        },
        new(tableLogicalName, new Guid("6314ca58-0928-ee11-9965-6045bd5cd155"))
        {               
            Attributes =
            {
                { "contoso_value", "25" },
                { "partitionid", "deviceid-002" }
            }
        }
    ];

    // Create an EntityCollection populated with the list of entities.
    EntityCollection entities = new(entityList)
    {
        EntityName = tableLogicalName
    };

    // Use UpdateMultipleRequest
    UpdateMultipleRequest updateMultipleRequest = new()
    {
        Targets = entities,
    };

    service.Execute(updateMultipleRequest);
}

DeleteMultiple mit elastischen Tabellen verwenden

Sie können die DeleteMultiple Nachricht entweder mit dem SDK für .NET oder der Web-API verwenden.

Die folgende statische Methode DeleteMultipleExample verwendet die DeleteMultiple-Nachricht mit der OrganizationRequest-Klasse, um mehrere Zeilen aus der contoso_SensorData Elastic-Tabelle zu löschen. Der alternative Schlüssel enthält den partitionid Wert, um die Zeilen eindeutig zu identifizieren.

Anmerkung

Die DeleteMultipleRequest-Klasse kann jetzt verwendet werden.

public static void DeleteMultipleExample(IOrganizationService service)
{
    string tableLogicalName = "contoso_sensordata";

    List<EntityReference> entityReferences = new() {
        {
            new EntityReference(logicalName: tableLogicalName,
                keyAttributeCollection: new KeyAttributeCollection
                {
                    { "contoso_sensordataid", "3f56361a-b210-4a74-8708-3c664038fa41" },
                    { "partitionid", "deviceid-001" }
                })
        },
        { new EntityReference(logicalName: tableLogicalName,
            keyAttributeCollection: new KeyAttributeCollection
            {
                { "contoso_sensordataid", "e682715b-1bba-415e-b2bc-de9327308423" },
                { "partitionid", "deviceid-002" }
            })
        }
    };

    DeleteMultipleRequest request = new()
    {
        Targets = new EntityReferenceCollection(entityReferences)
    };

    service.Execute(request);
}

Nächste Schritte

Erfahren Sie, wie Sie mit Code JavaScript Object Notation (JSON)-Daten in JSON-Spalten in elastischen Tabellen erstellen und abfragen können.

Siehe auch

Elastische Tabellen für Entwickler
Erstellen Sie elastische Tabellen mit Code
Abfrage von JSON-Spalten in elastischen Tabellen
Beispielcode für Elastic table
Massenvorgangsnachrichten (Vorschauversion)