Tabellenzeilen mit dem SDK für .NET erstellen

Dieser Artikel enthält Beispiele mit spät und früh gebundenen Programmierstilen. Weitere Informationen:

Einfache Erstellung

Die folgenden Beispiele zeigen, wie Sie eine Tabellenzeile mit dem spät gebundenen und dem früh gebundenen Programmierstil erstellen.

Jedes der Beispiele verwendet eine svc-Variable, die eine Instanz einer Klasse darstellt, die die Methoden in der IOrganizationService-Schnittstelle implementiert. Weitere Informationen zu Klassen, die diese Schnittstelle unterstützen, finden Sie unter IOrganizationService-Schnittstelle.

Anmerkung

Jede Tabelle hat eine eindeutige Primärschlüsselspalte, die Sie beim Erstellen einer Zeile angeben können. In den meisten Fällen sollten Sie dies vom System festlegen lassen, da die vom System generierten Werte für eine bestmögliche Leistung optimiert sind.

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.

Mit elastischen Tabellen können Sie Datensätze mit doppelten Primärschlüsselwerten und unterschiedlichen partitionid-Werte erstellen. Dieses Muster ist jedoch nicht mit modellgesteuerten oder Canvas-Power Apps kompatibel. Erfahren Sie mehr über das Festlegen des Primärschlüsselwerts mit elastischen Tabellen

Das folgende Bespiel zeigt, wie mit der Entitätsklasse ein Konto anhand der Methode IOrganizationService.Create erstellt wird.

//Use Entity class with entity logical name
var account = new Entity("account");

// set attribute values
    // string primary name
    account["name"] = "Contoso";
    // Boolean (Two option)
    account["creditonhold"] = false;
    // DateTime
    account["lastonholdtime"] = new DateTime(2017, 1, 1);
    // Double
    account["address1_latitude"] = 47.642311;
    account["address1_longitude"] = -122.136841;
    // Int
    account["numberofemployees"] = 500;
    // Money
    account["revenue"] = new Money(new decimal(5000000.00));
    // Picklist (Option set)
    account["accountcategorycode"] = new OptionSetValue(1); //Preferred customer

//Create the account
Guid accountid = svc.Create(account);

Die CreateRequest-Klasse nutzen

Anstatt die IOrganizationService.Create-Methode zu nutzen, können Sie entweder die spät gebundene Entity-Klasse oder die früh gebundenen generierten Entitätsklassen mit dem CreateRequest verwenden, indem Sie die Entitätsinstanz der CreateRequest.Target-Eigenschaft zuweisen und dann die IOrganizationService.Execute-Methode verwenden, um eine CreateResponse Instanz zu erhalten. Die ID der erstellten Kontotabellenzeile ist im Wert der Eigenschaft CreateResponse.id enthalten.

var request = new CreateRequest() { Target = account };
var response  = (CreateResponse)svc.Execute(request);
Guid accountid = response.id;

Wenn die CreateRequest-Klasse verwendet werden soll

Sie müssen die CreateRequest-Klasse verwenden, wenn Sie optionale Parameter übergeben möchten. Es gibt zwei Fälle, in denen Sie möglicherweise bestimmte Parameter brauchen.

CreateMultipleRequest-Klasse verwenden

Wenn Sie mehrere Datensätze desselben Typs erstellen müssen, ist die CreateMultipleRequest-Klasse der leistungsstärkste Weg. Weitere Informationen: Nachrichten zu Massenvorgängen

Für Standardtabellen, wenn Sie eine neue Tabellenzeile erstellen, können Sie im selben Vorgang auch verwandte Zeilen erstellen. Dies wird deep insert genannt.

Die folgenden Beispiele für späte und frühe Bindung erstellen einen Account und einen Kontakt, der mit diesem Account mithilfe der contact account_primary_contact-1:n-Beziehung verknüpft ist, wobei das Lookup account primarycontactid das ReferencingAttribute ist.

Die Beispiele erstellen außerdem drei verwandte Aufgabe-Zeilen unter Verwendung der 1:n-Beziehung Konto Account_Tasks, wobei das Nachschlagefeld Aufgabe regardingobjectid das ReferencingAttribute-Konto ist.

Im spät gebundenen Stil müssen Sie explizit eine oder mehrere verwandte Entitäten (Zeilen) zu einer EntityCollection hinzufügen und dann die Relationship-Klasse verwenden, um die Beziehung mithilfe des SchemaName der Beziehung zu definieren, bevor Sie diese der Entity.RelatedEntities Eigenschaft hinzufügen können.

// Use Entity class with entity logical name
var account = new Entity("account");

// Set attribute values
    // string primary name
    account["name"] = "Sample Account";

// Create Primary contact
var primaryContact = new Entity("contact");
primaryContact["firstname"] = "John";
primaryContact["lastname"] = "Smith";

// Add the contact to an EntityCollection
EntityCollection primaryContactCollection = new EntityCollection();
primaryContactCollection.Entities.Add(primaryContact);

// Set the value to the relationship
account.RelatedEntities[new Relationship("account_primary_contact")] = primaryContactCollection;

// Add related tasks to create
var taskList = new List<Entity>() {
            new Entity("task") { ["subject"] = "Task 1" },
            new Entity("task") { ["subject"] = "Task 2" },
            new Entity("task") { ["subject"] = "Task 3" }
        };

// Add the tasks to an EntityCollection
EntityCollection tasks = new EntityCollection(taskList);

// Set the value to the relationship
account.RelatedEntities[new Relationship("Account_Tasks")] = tasks;

// Create the account
Guid accountid = svc.Create(account);

Tabellenzeilen bei der Erstellung zuordnen

Sie können jede neue Zeile mit einer bereits vorhandenen Zeile verknüpfen, wenn Sie sie auf die gleiche Weise wie beim Aktualisieren erstellen. Sie müssen eine EntityReference verwenden, um den Wert einer Suchspalte (Attribut) festzulegen.

Diese Lookup-Zuweisung ist für frühe und späte Bindung gleich.

//Use Entity class with entity logical name
var account = new Entity("account");

// set attribute values
    //string primary name
    account["name"] = "Sample Account";

Guid primarycontactid = new Guid("e6fa5509-2582-e811-a95e-000d3af40ae7");

account["primarycontactid"] = new EntityReference("contact", primarycontactid);

//Create the account
Guid accountid = svc.Create(account);

Alternativschlüssel verwenden

Wenn Sie die ID der Tabellenzeile nicht kennen und die folgenden Bedingungen zutreffen:

  • Sie haben Alternativschlüssel für die Tabelle konfiguriert.
  • Sie kennen die Schlüsselwerte

Sie können mit den Parametern keyName und keyValue die alternativen EntityReference-Konstruktoren verwenden.

account["primarycontactid"] = new EntityReference("contact", "sample_username", "john.smith123");

Anmerkung

Alternativschlüssel werden in der Regel nur für Datenenintegrationsszenarien verwendet

Weitere Informationen:

Nach doppelten Datensätzen suchen

Weitere Informationen: Erkennen von doppelten Daten mit dem SDK für .NET

Festlegen von Standardwerten aus der primären Tabellenzeile

Wenn Personen in der Anwendung neue Zeilen erstellen, werden diese oft im Kontext einer anderen Zeile erstellt. Sie können beispielsweise im Kontext eines Kontos einen neuen Kontaktdatensatz erstellen. Dabei werden bestimmte Spaltenwerte aus dem Konto in das Kontaktformular kopiert. Dadurch wird die Erstellung der neuen zugehörigen Zeile beschleunigt, da für die neue Zeile einige Standardwerte festgelegt werden, sodass die Person, die die zu erstellende Zeile bearbeitet, diese Werte nicht eingeben muss. Sie können die Werte ändern, wenn Sie dies möchten, vor dem Speichern.

Die Werte, die beim Erstellen einer neuen Zeile auf diese Weise kopiert werden, werden durch die Konfigurationen gesteuert, die auf die Microsoft Dataverse-Umgebung angewendet werden, sodass es zwischen Umgebungen Unterschiede geben kann.

Weitere Informationen:

Als Entwickler können Sie die InitializeFromRequest-Klasse verwenden, um eine Entitätsinstanz zu generieren, bei der die Standardwerte bereits gesetzt sind.

Der folgende Code erstellt einen neuen Kontakt, der einem vorhandenen Konto zugeordnet ist. Der Kontakt ist mit dem angegebenen Konto verknüpft und bestimmte Attributwerte werden standardmäßig festgelegt, wie z. B. Telephone1 und verschiedene Adresswerte, die von Konto und Kontakt gemeinsam genutzt werden.

//The account that the contact will be associated with:
var parentAccount = new EntityReference("account", new Guid("a976763a-ba1c-e811-a954-000d3af451d6"));

// Initialize a new contact entity with default values from the account.
var request = new InitializeFromRequest()
{
    EntityMoniker = parentAccount,
    TargetEntityName = "contact"

};

var response = (InitializeFromResponse)svc.Execute(request);
//Get the Entity from the response
Entity contact = response.Entity;

// Set values that are not from the account
contact["firstname"] = "Joe";
contact["lastname"] = "Smith";

// Create the contact
Guid contactid = svc.Create(contact);

Upsert verwenden

Eine andere Möglichkeit, eine Tabellenzeile zu erstellen, ist die Verwendung der UpsertRequest-Klasse. Ein Upsert erstellt eine neue Zeile, wenn keine Zeile vorhanden ist, die die eindeutigen Bezeichner enthält, die in der mit der Anfrage übergebenen Zeile enthalten sind.

Weitere Informationen: Upsert verwenden

Erstellen Sie Dokumente in Speicherpartitionen

Wenn Sie eine Vielzahl von elastischen Tabellenzeilen erstellen, die nicht relationale Daten enthalten, können Sie die Zeilen in Speicherpartitionen erstellen, um den Zugriff auf diese Zeilen zu beschleunigen. Weitere Informationen: Partitioning und horizontale Skalierung

Siehe auch

Eine Tabellenzeile mit dem SDK für .NET abrufen
Tabellenzeilen mit dem SDK für .NET aktualisieren und löschen
Zuordnen und Aufheben der Zuordnung von Tabellenzeilen über das SDK für .NET