Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieser Artikel enthält Beispiele mit spät und früh gebundenen Programmierstilen. Weitere Informationen:
- Programmierung mit später und früher Bindung mithilfe des SDK für .NET
- Generieren von Klassen mit früher Bindung für das SDK für .NET
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.
- Wenn Sie möchten, dass Regeln zur Duplikaterkennung angewendet werden. Weitere Informationen: Erkennen von doppelten Daten mit dem SDK für .NET
- Wenn Sie eine Zeile erstellen, die eine Lösungskomponente darstellt, z. B. eine WebResource, und sie mit einer bestimmten Lösung verknüpfen möchten. In diesem Fall würden Sie den Wert von Solution.UniqueName mithilfe des Parameters
SolutionUniqueNameeinschließen. Weitere Informationen: Nachrichten mit dem SDK für .NET verwenden
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
Verknüpfte Entitäten in einem Vorgang erstellen
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:
- Alternative Schlüssel zum Referenzieren von Zeilen definieren
- Verwenden Sie einen Alternativschlüssel, um auf einen Datensatz zu verweisen
- Arbeiten mit Ersatztasten
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