共用方式為


存取實體關聯 (Dynamics CRM 2015)

 

發行︰ 2016年11月

適用於: Dynamics CRM 2015

Microsoft Dynamics 365 開發人員擴充功能也提供擷取相關實體的 helper 方法。OrganizationServiceContext 的標準行為需要實體關聯成員來明確地載入,要在如本範例中的相關實體可以存取之前進行。

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

對於希望使用靜態的成員,而不是根據字串的關聯以及屬性名稱,有一套 Helper 方法採取關聯引數做為靜態運算式。 這個運算式採取 lambda 運算式形式搭配單一實體的參數。 Helper 負載篩選所有 OrganizationServiceContext 關聯方法,包括以下:
LoadProperty
GetRelatedEntity
GetRelatedEntities
AttachLink
DetachLink
AddLink
DeleteLink
AddRelatedObject

LoadProperty Helper 方法的使用方法如下列範例顯示。

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

其他組 Helper 會隱含呼叫 LoadProperty 方法並採用 OrganizationServiceContext 參照做為第一個參數。 這適用於 GetRelatedEntityGetRelatedEntities 方法,如此處所示。

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

透過使用 CrmOrganizationServiceContext,或產生的 XrmServiceContext,您可以存取的關聯的最簡單的程式碼。 此內容允許透過在內部並暗中呼叫 LoadProperty (如此處所示),追蹤內容參照自動將相關實體懶惰載入。

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

另請參閱

開發人員擴充功能內容物件模型 (Dynamics CRM 2015)
使用設定檔設定內容 (Dynamics CRM 2015)
將實體附加至內容 (Dynamics CRM 2015)
內容增強功能

© 2017 Microsoft. 著作權所有,並保留一切權利。 著作權