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.
Wenn Sie mit den SDK für .NET-Assemblys arbeiten, haben Sie zwei Programmierstile, die Sie verwenden können: spät gebunden und früh gebunden.
Der Hauptunterschied zwischen frühem und spätem Binden betrifft die Typkonvertierung. Wenn die frühere Bindung Kompilierzeitüberprüfung aller Typen zur Verfügung stellt, sodass keine impliziten Umwandlungen auftreten, überprüfen späte Bindung nur Typen, wenn das Objekt erstellt oder eine Aktion am Typ ausgeführt wurde. Die Entity Klasse erfordert, dass Typen explizit angegeben werden, um implizite Umwandlungen zu verhindern.
Mit verspäteter Bindung können Sie mit benutzerdefinierten Tabellen (Entitäten) oder Spalten (Attributen) arbeiten, die beim Kompilieren des Codes nicht verfügbar waren.
Späte Bindung
Bei der spätgebundenen Programmierung nutzen Sie die Entity Klasse, um mithilfe ihrer LogicalName Eigenschaftswerte auf Tabellenzeilen und -spalten (Entitäten und Attribute) zu verweisen.
Beziehungen verfügen nicht über eine LogicalName Eigenschaft, daher wird die RelationshipMetadataBase.SchemaName -Eigenschaft verwendet.
Der Hauptvorteil für die spätgebundene Programmierung besteht darin, dass Sie die Klassen nicht generieren oder diese generierte Datei in Ihre Projekte einschließen müssen. Die generierte Datei kann groß sein.
Die Hauptnachteile sind:
- Sie erhalten keine Kompilierungszeitüberprüfung für Namen von Entitäten, Attributen und Beziehungen.
- Sie müssen die Namen der Attribute und Beziehungen in den Metadaten kennen.
Tipp
Ein Tool, mit dem Sie diese Informationen problemlos finden können, ist der Metadatenbrowser. Dies ist eine App, die Sie in Ihrer Organisation herunterladen und installieren können. Weitere Informationen: Durchsuchen der Metadaten für Ihre Umgebung
Example
Im folgenden Beispiel erstellt eine Firma mit dem später Bindung.
//Use Entity class specifying the 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);
Frühe Bindung
Für die Early-bound-Programmierung müssen Sie zunächst eine Reihe von Klassen basierend auf den Tabellen- und Spaltendefinitionen (Entitäts- und Attributmetadaten) für eine bestimmte Umgebung mithilfe des Codegenerierungstools Power Platform CLI pac modelbuilder build generieren. Weitere Informationen: Generieren von Klassen für die frühgebundene Programmierung mit dem SDK für .NET
Nachdem Sie früh gebundene Klassen mithilfe des Tools zur Codegenerierung generiert haben, erhalten Sie eine bessere Erfahrung beim Schreiben von Code, da Klassen und Eigenschaften die entsprechenden SchemaName Eigenschaftswerte verwenden:
Instanziieren Sie einfach die Klasse, und lassen Sie Visual Studio IntelliSense die Namen von Eigenschaften und Beziehungen bereitstellen.
Die klassen, die für die frühgebundene Programmierung generiert werden, können auch Definitionen für alle benutzerdefinierten Aktionen enthalten, die für die Umgebung definiert sind. Dadurch erhalten Sie ein Anforderungs- und Antwortklassenpaar, das mit diesen benutzerdefinierten Aktionen verwendet werden soll. Weitere Informationen: Benutzerdefinierte Aktionen
Klassen werden mithilfe von Tabellendefinitionen aus einer bestimmten Umgebungsinstanz generiert, und jede Instanz kann unterschiedliche Tabellen und Spalten aufweisen, in denen sich diese im Laufe der Zeit ändern können. Möglicherweise müssen Sie Code schreiben, um für Tabellen zu arbeiten, die nicht vorhanden sind, wenn Sie die stark typierten Klassen generieren.
Von Bedeutung
Wenn Sie OrganizationServiceProxy verwenden, um die IOrganizationService-Methoden bereitzustellen, die Sie nutzen werden, müssen Sie die OrganizationServiceProxy.EnableProxyTypes()-Methode aufrufen, um frühe gebundene Typen zu aktivieren.
Example
Das folgende Beispiel erstellt eine Firma mit früher Bindung.
var account = new 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);
Wählen Sie den Stil aus
Welcher zu verwendende Programmierstil liegt bei Ihnen. Die folgende Tabelle enthält die Vor- und Nachteile für die einzelnen.
| Frühe Bindung | Späte Bindung |
|---|---|
| Zur Kompilierungszeit können Sie Entitäts-, Attribut- und Beziehungsnamen überprüfen. | Keine Kompilierungszeitüberprüfung von Entitäts-, Attribut- und Beziehungsnamen |
| Sie müssen Entitätsklassen generieren. | Sie müssen keine Entitätsklassen generieren. |
| Bessere IntelliSense-Unterstützung | Weniger IntelliSense-Unterstützung |
| Weniger Code zu schreiben; Code ist besser lesbar | Mehr Code zum Schreiben; Code ist weniger lesbar |
| Ein wenig weniger leistungsfähig | Etwas performanter |
Früh und spät gebundene Bindungen kombinieren
Da alle generierten Klassen von der Klasse erben, die mit der Entity spät gebundenen Programmierung verwendet wird, können Sie mit Entitäten, Attributen und Beziehungen arbeiten, die nicht innerhalb von Klassen definiert sind.
Examples
Das folgende Beispiel zeigt eine Möglichkeit, frühe und späte Bindungsmethoden mithilfe von OrganizationServiceContext.
// Create an context object
AWCServiceContext context = new AWCServiceContext(_serviceProxy);
// Instantiate an account object using the Entity class.
Entity testaccount = new Entity("account");
// Set several attributes. For account, only the name is required.
testaccount["name"] = "Fourth Coffee";
testaccount["emailaddress1"] = "marshd@contoso.com";
// Save the entity using the context object.
context.AddToAccountSet(testaccount);
context.SaveChanges();
Wenn ein benutzerdefiniertes Attribut nicht in den generierten Klassen enthalten war, können Sie es weiterhin verwenden.
var account = new Account();
// set attribute values
// string primary name
account.Name = "Contoso";
// A custom boolean attribute not included in the generated classes.
account["sample_customboolean"] = false;
//Create the account
Guid accountid = svc.Create(account);
Zuweisen einer früh gebundenen Instanz zu einer spät gebundenen Instanz
Das folgende Beispiel zeigt, wie Sie einer spät gebundenen Instanz eine früh gebundene Instanz zuweisen.
Entity incident = ((Entity)context.InputParameters[ParameterName.Target]).ToEntity<Incident>();
Task relatedEntity = new Task() { Id = this.TaskId };
incident.RelatedEntities[new Relationship("Incident_Tasks")] =
new EntityCollection(new Entity[] { relatedEntity.ToEntity<Entity>() });
Siehe auch
Entitätsvorgänge mit dem SDK für .NET
Tabellenzeilen mit dem SDK für .NET erstellen
Abrufen einer Tabellenzeile über das SDK für .NET
Abfragen von Daten mithilfe des SDK für .NET
Tabellenzeilen über das SDK für .NET aktualisieren und löschen
Zuordnen und Aufheben der Zuordnung von Tabellenzeilen über das SDK für .NET
IOrganizationService-Schnittstelle
Verwenden von OrganizationServiceContext