作成、更新、および削除の事前バインド エンティティ クラスの使用

公開日: 2017年1月

対象: Dynamics 365 (online)、Dynamics 365 (on-premises)、Dynamics CRM 2016、Dynamics CRM Online

Microsoft Dynamics 365 (オンラインおよび設置型) では、コード生成ツール (CrmSvcUtil) で作成されたエンティティ データ モデルおよび事前バインド エンティティ クラスを使用してビジネス データを操作できます。 組織サービス コンテキストあり、またはなしでこれらの事前バインド クラスを使用できますが、ベスト プラクティスは生成された組織サービス コンテキスト クラスを使用することです。 コンテキストは関連付けを効率よく管理しようとしますが、通常は手書きのコードの方が効率的です。

注意

レコードに対する更新は、特定の順序で行われます。 まず、主エンティティが処理されてから、関連エンティティが処理されます。 参照属性または関連エンティティ属性に対して主エンティティによって変更が行われてから、関連エンティティが同じ属性を更新した場合は、関連エンティティの値が保持されます。 一般に、参照属性値と、同じ関連付けに対する RelatedEntities (またはナビゲーション プロパティ) の同等の値は、同時に使用しないでください。

このトピックの内容

組織サービス コンテキスト クラスの使用

事前バインド エンティティ クラスと組織サービス コンテキストを使用した新しいエンティティ レコードの作成

事前バインド エンティティ クラスと組織サービス コンテキストクラスを使用したエンティティ レコードの更新

事前バインド エンティティ クラスと組織サービス コンテキストクラスを使用したエンティティ レコードの削除

コンテキスト オブジェクトのない事前バインド エンティティ クラスの使用

組織サービス コンテキスト クラスの使用

コード生成ツールで作成され、OrganizationServiceContext から継承される組織サービス コンテキスト クラスは、データ変更の追跡に使用されます。 コンテキストは、Microsoft Dynamics 365 のデータを表すエンティティの種類のインスタンスであるオブジェクトを追跡します。 組織サービス コンテキストのオブジェクトを変更、作成、および削除でき、これらのオブジェクトに対して行った変更は Microsoft Dynamics 365 によって追跡されます。OrganizationServiceContext.SaveChanges メソッドが呼び出されると、Microsoft Dynamics 365 は、Microsoft Dynamics 365 内のデータに対して同等の挿入、更新、または削除ステートメント実行するコマンドを生成して実行します。

事前バインド エンティティ クラスを操作する場合は、エンティティ名と属性スキーマ名を使用して、操作するエンティティまたは属性を指定します。 属性スキーマ名は EntityMetadata.SchemaName および AttributeMetadata.SchemaNameで定義されます。または、コードで生成されたファイルに示されるクラス名とプロパティ名を使用することができます。以下のサンプルは、新しい取引先担当者インスタンスの電子メール属性に値を割り当てる方法を示します。

Contact contact = new Contact();contact.EMailAddress1 = “sonny@contoso.com”;

事前バインド エンティティ クラスを使用して基本的なデータベース アクションを実行する方法を示す完全なコード サンプルについては、「サンプル: レコードの作成、取得、更新、および削除 (事前バインド)」を参照してください。

事前バインド エンティティ クラスと組織サービス コンテキストを使用した新しいエンティティ レコードの作成

エンティティ データ モデルを使用して Microsoft Dynamics 365 にデータを挿入する場合は、エンティティの種類のインスタンスを作成し、組織サービス コンテキストにオブジェクトを追加する必要があります。 組織サービス コンテキストは、オブジェクトを Microsoft Dynamics 365 に保存する前にオブジェクトを追跡する必要があります。

新規エンティティ レコードを作成する場合は、OrganizationServiceContext.AddObject メソッドを使用して組織サービス コンテキストにオブジェクトを追加します。

次のサンプルでは、エンティティ データ モデルを使用して新しい連絡先レコードをインスタンス化および保存する方法を示します。 カスタム属性にアクセスする方法も示します。

OrganizationServiceContext orgContext =new OrganizationServiceContext(_serviceProxy);
Contact contact = new Contact()   
 {
   FirstName = "Charles",
   LastName = "Brown",
   Address1_Line1 = "123 Main St.",
   Address1_City = "Des Moines",
   Address1_StateOrProvince = "IA",
   Address1_PostalCode = "21254",
   new_twittername = "Chuck",
   Telephone1 = "123-234-5678"
 }; 
orgContext.AddObject(contact);orgContext.SaveChanges();

コンテキストにオブジェクトを追加した後、OrganizationServiceContext.SaveChanges メソッドが呼び出される前に、コンテキストが新しいオブジェクトの ID を生成します。Microsoft Dynamics 365 データに対する更新が失敗した場合は、SaveChangesResults を含む例外が SaveChanges メソッドからスローされます。

事前バインド エンティティ クラスと組織サービス コンテキストクラスを使用したエンティティ レコードの更新

Microsoft Dynamics 365 は、組織サービス コンテキストに添付されているオブジェクトに対する変更を追跡します。 既存のエンティティ レコードを変更するには、最初にオブジェクトをコンテキストに追加する必要があります。 オブジェクトをコンテキストに追加するには、Microsoft Dynamics 365 からエンティティ レコードを取得してから、OrganizationServiceContext.Attach メソッドを使用してオブジェクトをコンテキストに追加する必要があります。 オブジェクトがコンテキストによって追跡された後、エンティティの属性を設定することでレコードを更新できます。

次のサンプルでは、事前バインド クラスを使用して取引先企業属性を更新する方法を示します。

Account.EMailAddress1 = “Contoso-WebMaster@contoso.com”;

次のサンプルでは、属性値を削除する方法を示します。

Account.EMailAddress1 = null;

各エンティティには、OnPropertyChangingおよび OnPropertyChanged という名前の 2 つの部分メソッドがあります。 これらのメソッドは、プロパティ セッターで呼び出されます。 これらのメソッドは、部分クラスを使用してカスタム ビジネス ロジックを挿入することで拡張できます。

事前バインド エンティティ クラスと組織サービス コンテキストクラスを使用したエンティティ レコードの削除

エンティティ レコードを削除するには、組織サービス コンテキストでオブジェクトを追跡する必要があります。 オブジェクトがコンテキストに配置された後、OrganizationServiceContext.DeleteObject メソッドを使用してコンテキスト上の削除するオブジェクトをマークできます。Microsoft Dynamics 365 のエンティティ レコードは、OrganizationServiceContext.SaveChanges メソッドが呼び出されるまで削除されません。

コンテキスト オブジェクトのない事前バインド エンティティ クラスの使用

コンテキスト オブジェクトを作成しない場合は、組織サービス コンテキスト オブジェクトを作成しないで事前バインド エンティティ クラスを使用できます。OrganizationServiceProxy クラスには OrganizationServiceProxy が含まれます。 エンティティ レコードの保存に使用することができる Create メソッドは、Microsoft Dynamics 365 に変更されます。

次のサンプルでは、組織サービス コンテキスト オブジェクトを作成しないで事前バインド エンティティ クラスを使用する方法を示します。OrganizationServiceProxy.Create メソッドは、新規作成されたエンティティ レコードに割り当てられている GUID ID を返します。

Contact contact = new Contact()
 {
   FirstName = "Charles",
   LastName = "Brown",
   Address1_Line1 = "123 Main St.",
   Address1_City = "Des Moines",
   Address1_StateOrProvince = "IA",
   Address1_PostalCode = "21254",
   Telephone1 = "123-234-5678" 
  };
 _contactId = _serviceProxy.Create(contact); 

Microsoft Dynamics 365 内のエンティティ レコードを更新するには、更新するデータを取得して、必要な変更を加えてから、OrganizationServiceProxy.Update メソッドを使用して、Microsoft Dynamics 365 に対してこれらの変更をコミットします。 エンティティ レコードを取得するには、OrganizationServiceProxy.Retrieve メソッドを使用して単一オブジェクトを取得するか、OrganizationServiceProxy.RetrieveMultiple メソッドを使用して複数のオブジェクトを取得します。 エンティティ レコードを削除するには、次のものを使用します。OrganizationServiceProxy.Delete メソッド。

関連項目

コードでの事前バインド型エンティティ クラスの使用
事前バインドされたエンティティ クラスを使用して関連レコード間の関連付けを追加または更新する
コード生成ツール (CrmSvcUtil.exe) を使用して事前バインド型エンティティ クラスを作成する
サンプル: レコードの作成、取得、更新、および削除 (事前バインド)

Microsoft Dynamics 365

© 2017 Microsoft. All rights reserved. 著作権