エンティティの関連付けへのアクセス (Dynamics CRM 2015)
公開日: 2016年11月
対象: Dynamics CRM 2015
Developer Extensions for Microsoft Dynamics 365 は、関連エンティティを取得するためのヘルパー メソッドも提供します。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);
}
文字列ベースの関係名と属性名ではなく、静的に型指定されたメンバーを操作する場合は、関係引数を静的な式として受け取る一連のヘルパー メソッドがあります。 式は、単一の Entity パラメーターを持つラムダ式の形式をとります。 以下を含め、すべての OrganizationServiceContext 関係メソッドに対してヘルパー オーバーロードが存在します。
LoadProperty
GetRelatedEntity
GetRelatedEntities
AttachLink
DetachLink
AddLink
DeleteLink
AddRelatedObject
LoadProperty ヘルパー メソッドの使用例を次に示します。
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);
}
別のヘルパー セットが LoadProperty メソッドを暗黙的に呼び出し、OrganizationServiceContext 参照を最初のパラメーターとして受け取ります。 これは、ここで示すように GetRelatedEntity メソッドおよび GetRelatedEntities メソッドに適用されます。
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);
}
関連項目
Developer Extensions のコンテキスト オブジェクト モデル (Dynamics CRM 2015)
構成ファイルを使用したコンテキストの構成 (Dynamics CRM 2015)
エンティティのコンテキストへの添付 (Dynamics CRM 2015)
コンテキストの機能拡張
© 2017 Microsoft. All rights reserved. 著作権