Relazioni tra entità di accesso (Dynamics CRM 2015)
Data di pubblicazione: novembre 2016
Si applica a: Dynamics CRM 2015
Le estensioni per gli sviluppatori per Microsoft Dynamics 365 forniscono metodi dell'helper per recuperare le entità correlate. Il comportamento standard di OrganizationServiceContext richiede che membri delle relazioni di entità vengano caricati in modo esplicito prima che sia possibile accedere alle entità correlate come illustrato in questo esempio.
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);
}
Per coloro che preferiscono utilizzare i membri tipizzati in modo statico anziché una relazione basata su stringhe e i nomi degli attributi, è disponibile un set di metodi dell'helper che accettano argomenti di relazione come espressioni statiche. L'espressione ha la forma di un'espressione lambda con un singolo parametro Entità. Gli overload dell'helper esistono per tutti i metodi di relazione OrganizationServiceContext inclusi i seguenti:
LoadProperty
GetRelatedEntity
GetRelatedEntities
AttachLink
DetachLink
AddLink
DeleteLink
AddRelatedObject
L'utilizzo del metodo dell'helper LoadProperty è indicato nell'esempio seguente.
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);
}
Un altro set di helper chiama il metodo LoadProperty in modo implicito e accetta un riferimento OrganizationServiceContext come primo parametro. Si applica ai metodi GetRelatedEntities e GetRelatedEntity come illustrato di seguito.
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);
}
Tramite CrmOrganizationServiceContext o XrmServiceContextgenerato, si dispone del codice più conciso per accedere alle relazioni. Questo contesto consente il caricamento lazy automatico delle entità correlate tenendo traccia del riferimento del contesto internamente e chiamando LoadProperty in modo implicito, come illustrato di seguito.
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);
}
Vedere anche
Modello a oggetti del contesto delle estensioni per gli sviluppatori (Dynamics CRM 2015)
Configurare il contesto con il file di configurazione (Dynamics CRM 2015)
Collega entità al contesto (Dynamics CRM 2015)
Miglioramenti del contesto
© 2017 Microsoft. Tutti i diritti sono riservati. Copyright