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).