方法: オブジェクト状態が変化したときにビジネス ロジックを実行する

このトピックでは、オブジェクト コンテキスト内でエンティティによって状態が変更されたときにビジネス ロジックを実行する方法について説明します。 次の例は、ObjectStateManagerChanged イベントの処理方法を示しています。このイベントは、削除メソッドまたはデタッチ メソッドによってエンティティがコンテキストを離れるか、クエリまたは追加メソッドやアタッチ メソッドによってコンテキストに入るときに発生します。

このトピックの例には、Adventure Works Sales Model が使用されています。このトピックのコードを実行するには、あらかじめプロジェクトに Adventure Works Sales Model を追加し、Entity Framework を使用するようにプロジェクトを構成しておく必要があります。詳細については、「Entity Data Model ウィザードを使用する方法 (Entity Framework)」、または「Entity Framework プロジェクトを手動で構成する方法」、および「Entity Data Model を手動で定義する方法 (Entity Framework)」を参照してください。

ObjectStateManagerChanged イベントの登録方法を次の例に示します。 このイベントは、オブジェクトがコンテキストに入るか、コンテキストから離れたときに発生します。 この例では、匿名メソッドがデリゲートに渡されます。 または、イベント処理メソッドを定義して、その名前をデリゲートに渡すこともできます。 匿名メソッドは、イベントがトリガーされるたびにオブジェクトのステータスを表示します。

int productID = 3;
string productName = "Flat Washer 10";
string productNumber = "FW-5600";
Int16 safetyStockLevel = 1000;
Int16 reorderPoint = 750;

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    // The ObjectStateManagerChanged event is raised whenever 
    // an entity leaves or enters the context. 
    context.ObjectStateManager.ObjectStateManagerChanged += (sender, e) =>
    {
        Console.WriteLine(string.Format(
        "ObjectStateManager.ObjectStateManagerChanged | Action:{0} Object:{1}"
        , e.Action
        , e.Element));
    };


    // When an entity is queried for we get an added event.
    var product =
            (from p in context.Products
             where p.ProductID == productID
             select p).First();

    // Create a new Product.
    Product newProduct = Product.CreateProduct(0,
        productName, productNumber, false, false, safetyStockLevel, reorderPoint,
        0, 0, 0, DateTime.Today, Guid.NewGuid(), DateTime.Today);

    // Add the new object to the context.
    // When an entity is added we also get an added event.
    context.Products.AddObject(newProduct);

    // Delete the object from the context.
    //Deleting an entity raises a removed event.
    context.Products.DeleteObject(newProduct);
}

参照

処理手順

スカラー プロパティの変更時にビジネス ロジックを実行する方法 (Entity Framework)
方法: アソシエーションの変更時にビジネス ロジックを実行する
変更を保存するときにビジネス ロジックを実行する方法 (Entity Framework)