Programmierung mit später und früher Bindung mithilfe des SDK für .NET
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 entscheidende Unterschied zwischen früher und später Bindung enthält 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 vermeiden.
Mit Late Binding können Sie mit benutzerdefinierten Tabellen (Entitäten) oder Spalten (Attributen) arbeiten, die beim Kompilieren Ihres Codes noch nicht verfügbar waren.
Späte Bindung
Die spät gebundene Programmierung verwendet die Entity-Klasse, bei der Sie auf Tabellenspalten und Spalten (Entitäten und Attribute) über deren LogicalName
-Eigenschaftswerte verweisen müssen:
Beziehungen besitzen keine LogicalName
-Eigenschaft, und so wird die Eigenschaft RelationshipMetadataBase.SchemaName verwendet.
Der Hauptvorteil für spät gebundene Programmierung ist, dass keine weiteren Schritte erforderlich sind, um die zu generieren Klassen in der Datei der generiert Projekte zu werden. Die generierte Datei kann groß sein.
Die Hauptnachteile sind:
- Sie erhalten keine Kompilierzeitvalidierung für Namen von Entitäten, Attributen und Beziehungen.
- Sie müssen die Namen der Attribute und Beziehungen den Metadaten kennen.
Tipp
Ein Tool, das Sie verwenden können, um die Informationen problemlos zu finden, ist der Browser für Metadaten. Dies ist eine App, die in Ihrer Organisation heruntergeladen und installiert werden kann. Weitere Informationen: Durchsuchen der Metadaten für die Umgebung.
Beispiel
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
Die Programmierung mit früher Bindung erfordert, dass Sie zunächst mit dem Codegenerierungstool Power Platform-CLI-Befehl „pac modelbuilder build“ einen Satz von Klassen auf der Grundlage der Tabellen- und Spaltendefinitionen (Entitäts- und Attribut-Metadaten) für eine bestimmte Umgebung generieren. Weitere Informationen Generieren von Klassen für die Programmierung mit früher Bindung mithilfe des SDK für .NET
Nach dem Generieren von früh gebundenen Klassen mit dem Code-Generierungs-Tool werden Sie beim Schreiben von Code eine bessere Erfahrung machen, da Klassen und Eigenschaften die jeweiligen SchemaName
-Eigenschaftswerte verwenden:
Instanzieren Sie einfach die Klasse und lassen Sie Visual Studio IntelliSense die Namen der Eigenschaften und Beziehungen bereitstellen.
Die Klassen, die für früh gebundene Programmierung erstellt wurden, können auch Definitionen für alle benutzerdefinierten Aktionen enthalten, die auch für die Umgebung definiert werden. Dies gibt Ihnen ein Paar Anforderungs- und Warteklassen für diese benutzerdefinierte Aktionen. Weitere Informationen: Benutzerdefinierte Aktionen.
Klassen werden unter Verwendung von Tabellendefinitionen aus einer bestimmten Umgebungsinstanz erzeugt und jede Instanz kann unterschiedliche Tabellen und Spalten haben, wobei sich diese im Laufe der Zeit ändern können. Möglicherweise müssen Sie Code für Tabellen schreiben, die nicht vorhanden sind, wenn Sie die stark typisierten Klassen generieren.
Wichtig
Wenn Sie OrganizationServiceProxy nutzen um die IOrganizationService bereitzustellen, verwenden Sie die OrganizationServiceProxy.EnableProxyTypes() Methode, um Typen mit früher Bindung zu aktivieren.
Beispiel
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
Für welchen Programmierstil Sie sich entscheiden, bleibt Ihnen überlassen. In der folgenden Tabelle werden die Vorteile und Nachteile für jeden bereitgestellt.
Frühe Bindung | Späte Bindung |
---|---|
Sie können Entitäten, Attribute und Beziehungsnamen zur Kompilierungszeit überprüfen | Keine Kompilierungszeit von Entitäten, Attributen und Beziehungsnamen |
Generieren Sie Entitätsklassen | Sie müssen keine Entitätsklassen generieren |
Besserer IntelliSense-Support | Weniger IntelliSense-Support |
Weniger Code zu schreiben; Code ist besser lesbar | Mehr Code zu schreiben; Code ist schlechter lesbar |
Etwas weniger leistungsstark | Etwas leistungsstärker |
Früh und spät gebundene Bindungen kombinieren
Da alle generierten Klassen von der Entity Klasse erben, die mit spät gebundener Programmierung verwendet wird, können Sie sie für Entitäten, Attribute und Beziehungen verwenden, die nicht innerhalb der Klassen definiert werden.
Beispiele
Das folgende Beispiel zeigt eine Möglichkeit der Kombination von frühen und späten 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 der erstellen Klassen hinzugefügt wurde, können Sie es erneut 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);
Instanz der frühen Bindung einer Instanz der späten Bindung zuweisen
Das folgende Beispiel zeigt, wie Sie eine Instanz der frühen Bindung einer Instanz der späten Bindung 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 mithilfe des SDK für .NET
Tabellenzeilen mit dem SDK für .NET erstellen
Abrufen einer Tabellenzeile über die SDK für .NET
Daten mithilfe des SDK für .NET abfragen
Aktualisieren und Löschen von Tabellenzeilen über die SDK für .NET
Zuordnen und Aufheben der Zuordnung von Tabellenzeilen über das SDK für .NET
IOrganizationService-Schnittstelle
Verwenden von OrganizationServiceContext
Hinweis
Können Sie uns Ihre Präferenzen für die Dokumentationssprache mitteilen? Nehmen Sie an einer kurzen Umfrage teil. (Beachten Sie, dass diese Umfrage auf Englisch ist.)
Die Umfrage dauert etwa sieben Minuten. Es werden keine personenbezogenen Daten erhoben. (Datenschutzbestimmungen).