Acceder a relaciones entre entidades (Dynamics CRM 2015)
Publicado: noviembre de 2016
Se aplica a: Dynamics CRM 2015
Las extensiones para desarrolladores de Microsoft Dynamics 365 también ofrecen métodos auxiliares para recuperar entidades relacionadas. El comportamiento estándar de OrganizationServiceContext requiere que los miembros de relaciones entre entidades se carguen explícitamente para poder tener acceso a las entidades relacionadas, como se muestra en este ejemplo.
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 quien prefiera trabajar con miembros con establecimiento estático de tipos, en lugar de con relaciones y nombres de atributo basados en cadenas, existe un conjunto de métodos auxiliares que toman los argumentos de relación como expresiones estáticas. La expresión adopta la forma de una expresión lambda con un solo parámetro de entidad. Las sobrecargas auxiliares existen para todos los métodos de relaciones OrganizationServiceContext incluidos los siguientes:
LoadProperty
GetRelatedEntity
GetRelatedEntities
AttachLink
DetachLink
AddLink
DeleteLink
AddRelatedObject
El uso del método auxiliar LoadProperty se muestra en el siguiente ejemplo.
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);
}
Otro conjunto de auxiliares llama al método LoadProperty implícitamente y recibe una referencia OrganizationServiceContext como primer parámetro. Esto se aplica a los métodos GetRelatedEntity y GetRelatedEntities como se muestra a continuación.
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);
}
Mediante CrmOrganizationServiceContext o XrmServiceContext generado, se tiene el código más conciso para el acceso a relaciones. Este contexto permite la carga automática pasiva de entidades relacionadas mediante el seguimiento interno de la referencia de contexto y la llamada a LoadProperty implícita, como se indica a continuación.
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);
}
Ver también
Modelo de objetos de contexto de extensiones de desarrollador (Dynamics CRM 2015)
Configurar el contexto con el archivo de configuración (Dynamics CRM 2015)
Adjuntar entidades al contexto (Dynamics CRM 2015)
Mejoras de contexto
© 2017 Microsoft. Todos los derechos reservados. Copyright