Как выполнять бизнес-логику при изменении состояния объекта

В этом разделе показано выполнение бизнес-логики при изменении состояния сущности в контексте объекта. В следующем примере показана обработка события ObjectStateManagerChanged, происходящего, когда сущность покидает контекст вследствие использования методов удаления или отделения или когда сущность входит в контекст посредством запросов, методов добавления или ввода.

Пример в этом разделе основан на модели Adventure Works Sales. Чтобы запустить код, используемый в данном разделе, нужно сначала добавить к проекту модель Adventure Works Sales и настроить его для использования платформы Entity Framework. Дополнительные сведения см. в разделе Как использовать мастер моделей EDM (Entity Framework) или Как вручную настроить проект Entity Framework и Как определить модель EDM вручную (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)