Zugreifen auf Entitätsbeziehungen (Dynamics CRM 2015)
Veröffentlicht: November 2016
Gilt für: Dynamics CRM 2015
Entwicklererweiterungen für Microsoft Dynamics 365 stellen auch Hilfsmethoden zum Abrufen von verknüpften Entitäten bereit. Das Standardverhalten von OrganizationServiceContext erfordert, dass Entitätsbeziehungsmitglieder explizit geladen werden, bevor der Zugriff auf verknüpfte Entitäten wie im folgenden Beispiel gezeigt möglich ist.
var connection = CrmConnection.Parse("Url=http://crm.contoso.com/xrmContoso; ProxyTypesAssembly=Xrm;");
using (var service = new OrganizationService(connection))
using (var context = new OrganizationServiceContext(service))
{
var contact = context.CreateQuery<Contact>().First(c => c.FirstName == "Bob");
var currencyEmpty = contact.GetRelatedEntity<Entity>("transactioncurrency_contact");
var currencyEmptyStatic = contact.transactioncurrency_contact;
// currency is always null until after calling LoadProperty
Console.WriteLine(currencyEmpty == null);
Console.WriteLine(currencyEmptyStatic == null);
context.LoadProperty(contact, "transactioncurrency_contact");
// read related entity dynamically
var currency = contact.GetRelatedEntity<Entity>("transactioncurrency_contact");
Console.WriteLine(currency.GetAttributeValue<string>("currencyname"));
// read related entity statically
var currencyStatic = contact.transactioncurrency_contact;
Console.WriteLine(currencyStatic.CurrencyName);
}
Wenn Sie lieber Elemente mit statischen Typen anstatt zeichenfolgenbasierte Attribut- und Beziehungnamen verwenden, gibt es einige Hilfsmethoden, die Beziehungsargumente als statische Ausdrücke verwenden. Der Ausdruck nimmt die Form eines Lambda-Ausdrucks mit einem einzelnen Entitätsparameter an. Hilfeüberladungen sind für alle OrganizationServiceContext Beziehungsmethoden einschließlich der folgenden vorhanden:
LoadProperty
GetRelatedEntity
GetRelatedEntities
AttachLink
DetachLink
AddLink
DeleteLink
AddRelatedObject
Die Verwendung der LoadProperty-Hilfsmethode wird im folgenden Beispiel gezeigt.
using Microsoft.Xrm.Client;
using (var service = new OrganizationService(connection))
using (var context = new OrganizationServiceContext(service))
{
var contact = context.CreateQuery<Contact>().First(c => c.FirstName == "Bob");
context.LoadProperty(contact, c => c.transactioncurrency_contact);
var currency = contact.transactioncurrency_contact;
Console.WriteLine(currency.CurrencyName);
}
Eine andere Gruppe Hilfsmethoden ruft implizit die LoadProperty-Methode auf und verwendet eine OrganizationServiceContext-Referenz als ersten Parameter. Dies betrifft die GetRelatedEntity- und die GetRelatedEntities-Methode, wie hier gezeigt wird.
using (var service = new OrganizationService(connection))
using (var context = new OrganizationServiceContext(service))
{
// use helper method that calls LoadProperty implicitly
var contact = context.CreateQuery<Contact>().First(c => c.FirstName == "Bob");
var currency = contact.GetRelatedEntity(context, "transactioncurrency_contact");
Console.WriteLine(currency.GetAttributeValue<string>("currencyname"));
}
using (var service = new OrganizationService(connection))
using (var context = new OrganizationServiceContext(service))
{
// use helper method that calls LoadProperty implicitly and maintains static typing
var contact = context.CreateQuery<Contact>().First(c => c.FirstName == "Bob");
var currency = contact.GetRelatedEntity(context, c => c.transactioncurrency_contact);
Console.WriteLine(currency.CurrencyName);
}
Durch Verwenden des CrmOrganizationServiceContext oder des generierten XrmServiceContext haben Sie den kürzesten Code zum Zugreifen auf Beziehungen. Dieser Kontext ermöglicht automatisches Lazy Loading verknüpfter Entitäten, indem die Kontextreferenz intern nachverfolgt und implizit LoadProperty aufgerufen wird, wie hier gezeigt.
using (var service = new OrganizationService(connection))
using (var context = new CrmOrganizationServiceContext(service))
{
// this context manages the context reference internally
var contact = context.CreateQuery<Contact>().First(c => c.FirstName == "Bob");
var currency = contact.transactioncurrency_contact;
Console.WriteLine(currency.CurrencyName);
}
Siehe auch
Objektmodell für den Kontext von Entwicklererweiterungen (Dynamics CRM 2015)
Den Kontext der Konfigurationsdatei konfigurieren (Dynamics CRM 2015)
Anhängen von Entitäten an den Kontext (Dynamics CRM 2015)
Kontexterweiterungen
© 2017 Microsoft. Alle Rechte vorbehalten. Copyright