Delen via


Toegang krijgen tot entiteitsrelaties (Dynamics CRM 2015)

 

Gepubliceerd: november 2016

Is van toepassing op: Dynamics CRM 2015

Developer-uitbreidingen voor Microsoft Dynamics 365 bevatten ook helpermethoden om gerelateerde entiteiten op te halen. Het standaardgedrag van OrganizationServiceContext vereist dat entiteitrelatieleden expliciet worden geladen voordat toegang tot de gerelateerde entiteiten kan worden gekregen, zoals getoond in dit voorbeeld.

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);
}

Voor degenen die liever werken met leden met statische typen dan met op tekenreeksen gebaseerde relaties en kenmerknamen, is er een set helpermethoden die relatieargumenten als statische expressies gebruiken. De expressie krijgt de vorm van een lambda-expressie met één entiteitparameter. Helper overloads bestaan voor alle OrganizationServiceContext-relatiemethoden, waaronder de volgende:
LoadProperty
GetRelatedEntity
GetRelatedEntities
AttachLink
DetachLink
AddLink
DeleteLink
AddRelatedObject

Het gebruik van de LoadProperty-helpermethode wordt getoond in het volgende voorbeeld.

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);
}

Een andere set helpers roept impliciet de LoadProperty-methode aan en gebruikt een OrganizationServiceContext-verwijzing als eerste parameter. Dit geldt voor de methoden GetRelatedEntities en GetRelatedEntity, zoals hier getoond.

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);
}

Als u de CrmOrganizationServiceContext of de gegenereerde XrmServiceContext gebruikt, hebt u de meest beknopte code voor het krijgen van toegang tot relaties. Deze context maakt automatisch lui laden van gerelateerde entiteiten mogelijk door de contextreferentie intern bij te houden en LoadProperty impliciet aan te roepen, zoals hier aangegeven.

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);
}

Zie ook

contextobjectmodel ontwikkelaarsuitbreidingen (Dynamics CRM 2015)
De context configureren met het configuratiebestand (Dynamics CRM 2015)
Entiteiten aan de context koppelen (Dynamics CRM 2015)
Contextverbeteringen

© 2017 Microsoft. Alle rechten voorbehouden. Auteursrecht