ビジネス ロジックの定義 (Entity Framework)

プロパティやリレーションシップの変更など、特定の操作時に発生するイベントを処理することで、Entity Framework アプリケーションにビジネス ロジックが追加されます。 このビジネス ロジックには、プロパティの変更や SaveChanges メソッドの呼び出しが行われたときの新たな検証やログの作成などが含まれます。 カスタム ビジネス ロジックは、Entity Framework によって発生したイベントを処理するか、プロパティが変更されたときに呼び出されるカスタムの部分メソッドを定義することによって呼び出すことができます。 このトピックではいくつかのイベントを記載し、その他の関連トピックへのリンクをまとめました。

イベントと部分メソッド 説明

System.Data.Objects.ObjectContext.ObjectMaterialized

クエリまたは読み込み操作の一部として、データ ソース内のデータから新しいエンティティが作成されたときに発生します。 このイベントは、オブジェクトにすべてのスカラー プロパティ、複合プロパティ、および参照プロパティが設定された後、コレクションが読み込まれる前に発生します。 オブジェクト コンテキストに同じキー値を持つオブジェクトが存在する場合、Entity Framework はオブジェクトを再作成せず、このイベントは発生しません。

System.Data.Objects.ObjectContext.SavingChanges

ObjectContext に対する SaveChanges 操作の開始時に発生します。 通常、このイベントは、新しい値がデータベースに書き込まれる前に、変更されたオブジェクトを検証するために使用されます。

詳細については、「変更を保存するときにビジネス ロジックを実行する方法 (Entity Framework)」を参照してください。

System.Data.Objects.ObjectStateManager.ObjectStateManagerChanged

エンティティが削除メソッドまたはデタッチ メソッドによりコンテキストから離れるか、クエリ、追加メソッド、またはアタッチ メソッドによりコンテキストに入ると、発生します。 詳細については、「方法: オブジェクト状態が変化したときにビジネス ロジックを実行する」を参照してください。

Dd456876.note(ja-jp,VS.100).gif注 :
変更追跡プロキシなしで POCO エンティティを使用している場合、DetectChanges メソッドを呼び出すか、DetectChanges を呼び出す SaveChanges メソッドを呼び出すと、変更が検出されます。

System.Data.Objects.DataClasses.RelatedEnd.AssociationChanged

アソシエーションが変更されると発生します。 プロキシ オブジェクトと共に既定のコード生成エンティティまたは POCO エンティティを使用している場合、このイベントは、実際のナビゲーション プロパティに変更が加えられると同時に発生します。

Dd456876.note(ja-jp,VS.100).gif注 :
プロキシなしで POCO エンティティを使用している場合、DetectChanges メソッドを呼び出すか、または DetectChanges メソッドを呼び出す SaveChanges メソッドを呼び出すと、変更が検出されます。

LoadAttachClear などの一括操作中は、イベントが抑制される場合もあります。

詳細については、「方法: アソシエーションの変更時にビジネス ロジックを実行する」を参照してください。

System.Data.Objects.DataClasses.StructuralObject.PropertyChanging

スカラー プロパティ値の変更が保留になると発生します。 Entity Framework で生成されたクラスは、スカラー プロパティ Set アクセス操作子で ReportPropertyChanging を呼び出します。 ReportPropertyChanging メソッドは、PropertyChanging イベントを発生させます。 プロパティ値が変更される前に、このイベントを処理して、検証などのビジネス ロジックを実行します。 詳細については、「スカラー プロパティの変更時にビジネス ロジックを実行する方法 (Entity Framework)」を参照してください。

IEntityWithChangeTracker を実装するカスタム データ クラスに対する変更を追跡するには、IEntityChangeTracker を使用してプロパティの変更を報告する必要があります。

Dd456876.note(ja-jp,VS.100).gif注 :
ナビゲーション プロパティが変更されたときに通知を受け取るには、System.Data.Objects.DataClasses.RelatedEnd.AssociationChanged イベントを登録します。詳細については、「方法: アソシエーションの変更時にビジネス ロジックを実行する」を参照してください。

System.Data.Objects.DataClasses.StructuralObject.PropertyChanged

スカラー プロパティ値が変更されたときに発生します。 Entity Framework で生成されたクラスは、スカラー プロパティ Set アクセス操作子で ReportPropertyChanged を呼び出します。 ReportPropertyChanged メソッドは、PropertyChanged イベントを発生させます。 プロパティが変更されたときに、このイベントを処理して、ログへの書き込みなどのビジネス ロジックを実行します。 詳細については、「スカラー プロパティの変更時にビジネス ロジックを実行する方法 (Entity Framework)」を参照してください。

IEntityWithChangeTracker を実装するカスタム データ クラスに対する変更を追跡するには、IEntityChangeTracker を使用してプロパティの変更を報告する必要があります。

Dd456876.note(ja-jp,VS.100).gif注 :
ナビゲーション プロパティが変更されたときに通知を受け取るには、System.Data.Objects.DataClasses.RelatedEnd.AssociationChanged イベントを登録します。詳細については、「方法: アソシエーションの変更時にビジネス ロジックを実行する」を参照してください。

OnContextCreated メソッド

Entity Data Model ツールによって、モデルの EntityContainer を表し、ObjectContext クラスから派生したクラスの OnContextCreated 部分メソッドが生成されます。 この部分メソッドは、ObjectContext が初期化されるたびに呼び出されます。 SavingChanges イベントのハンドラーを登録するコードにこの部分メソッドを実装します。 詳細については、「変更を保存するときにビジネス ロジックを実行する方法 (Entity Framework)」を参照してください。

On PropertyName ChangingOnPropertyNameChanged

Entity Data Model ツールによって、エンティティ型ごとに、スカラー プロパティ set アクセサーに部分メソッドが生成されます。 OnPropertyNameChanging 部分メソッドは、値が設定される前に呼び出されます。 OnPropertyNameChanged 部分メソッドは、値が設定された後に呼び出されます。 これらの部分メソッドを実装してビジネス ロジックを追加します。

参照

概念

オブジェクトのカスタマイズ (Entity Framework)

その他のリソース

Entity Data Model Tools