Compartilhar via


Relacionamentos de entidades de acesso (Dynamics CRM 2015)

 

Publicado: novembro de 2016

Aplicável a: Dynamics CRM 2015

As extensões de desenvolvedor para o Microsoft Dynamics 365 também fornecem métodos auxiliares para recuperar entidades relacionadas. O comportamento padrão do OrganizationServiceContext exige que membros de relacionamentos entre entidades sejam explicitamente carregados antes das entidades relacionadas puderem ser acessadas como mostrado nesse exemplo.

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

Para aqueles que preferem trabalhar com membros estaticamente digitados em vez de relação baseado em cadeias de caracteres e nomes do atributo, há um conjunto de métodos de ajuda que tomam argumentos de relacionamento como expressões estáticas. A expressão leva o formulário de uma expressão lambda com um único parâmetro Entity. Existem sobrecargas auxiliares para todos os métodos de relacionamento OrganizationServiceContext incluindo:
LoadProperty
GetRelatedEntity
GetRelatedEntities
AttachLink
DetachLink
AddLink
DeleteLink
AddRelatedObject

Uso de método de ajuda do LoadProperty é mostrado no exemplo a seguir.

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

Outro conjunto de ajuda chama o método LoadProperty implicitamente e leva uma referência do OrganizationServiceContext como o primeiro parâmetro. Isso é aplicado aos métodos GetRelatedEntity e GetRelatedEntities mostrados aqui.

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

Usando o CrmOrganizationServiceContext ou o XrmServiceContext gerado, você tem o código mais conciso para acessar relacionamentos. Esse contexto permite a carga preguiçosa automática de entidades relacionadas acompanhando a referência de contexto internamente e chamando o LoadProperty implicitamente, conforme ilustrado a seguir.

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

Confira Também

Modelo de objeto do contexto das extensões de desenvolvedor (Dynamics CRM 2015)
Configurar o contexto com o arquivo de configuração (Dynamics CRM 2015)
Anexar entidades ao contexto (Dynamics CRM 2015)
Aprimoramentos de contexto

© 2017 Microsoft. Todos os direitos reservados. Direitos autorais