Cómo: Ejecutar la lógica de negocios cuando el estado del objeto cambia

Este tema muestra cómo ejecutar la lógica de negocios cuando una entidad cambia el estado dentro del contexto de los objetos. El siguiente ejemplo muestra cómo controlar el evento ObjectStateManagerChanged, el cual se produce cuando las entidades abandonan el contexto a través de métodos para eliminar o desasociar, o entran en el contexto a través de consultas o métodos para agregar y asociar.

El ejemplo de este tema se basa en el modelo AdventureWorks Sales. Para ejecutar el código de este tema, debe haber agregado el modelo AdventureWorks Sales al proyecto y haber configurado el proyecto para que use Entity Framework. Para obtener más información, vea Cómo: Usar el Asistente para Entity Data Model (Entity Framework) o Cómo: Configurar manualmente un proyecto de Entity Framework y Cómo: Definir manualmente un modelo Entity Data Model (Entity Framework).

Ejemplo

En el siguiente ejemplo se muestra cómo registrar el evento ObjectStateManagerChanged. Este evento se produce cuando un objeto entra o sale del contexto. En este ejemplo, se pasa un método anónimo al delegado. Como alternativa, puede definir el método de control de eventos y, a continuación, pasar su nombre al delegado. El método anónimo muestra el estado del objeto cada vez que se desencadena el evento.

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

Vea también

Tareas

Cómo: Ejecutar la lógica empresarial durante los cambios de propiedades escalares (Entity Framework)
Cómo: Ejecutar la lógica de negocios durante los cambios de asociación
Cómo: Ejecutar la lógica de negocios al guardar los cambios (Entity Framework)