Перехватывать сохранение сущностей с помощью ADO.NET Entities Framework - PullRequest
3 голосов
/ 16 января 2009

Я хочу вызвать функцию проверки внутри объектов сущностей непосредственно перед их сохранением с помощью ObjectContext # SaveChanges (). Теперь я могу отслеживать все измененные объекты самостоятельно, а затем перебирать все их и вызывать их методы проверки, но я предполагаю, что более простой подход - реализовать некоторый обратный вызов, который ObjectContext вызовет перед сохранением каждой сущности. Можно ли вообще это сделать? Есть ли альтернатива?

Ответы [ 2 ]

8 голосов
/ 19 января 2009

Я понял, как. По сути, мы можем перехватить событие SavingChanges объекта ObjectContext и выполнить цикл по вновь добавленным / измененным объектам для вызова их функции проверки. Вот код, который я использовал.

    partial void OnContextCreated()
    {
        SavingChanges += PerformValidation;
    }

    void PerformValidation(object sender, System.EventArgs e)
    {
        var objStateEntries = ObjectStateManager.GetObjectStateEntries(
            EntityState.Added | EntityState.Modified);

        var violatedRules = new List<RuleViolation>();
        foreach (ObjectStateEntry entry in objStateEntries)
        {
            var entity = entry.Entity as IRuleValidator;
            if (entity != null)
                violatedRules.AddRange(entity.Validate());
        }
        if (violatedRules.Count > 0)
            throw new ValidationException(violatedRules);
    }
0 голосов
/ 16 января 2009

Ну, вы могли бы сделать это таким образом, но это означает, что вы позволяете своим клиентам иметь прямой доступ к ObjectContext, и лично мне нравится абстрагироваться от этого, чтобы сделать клиентов более тестируемыми.

Что я делаю, это использую шаблон репозитория и выполняю проверку, когда в репозитории вызывается сохранение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...