Как вы ловите событие Save или Load в классе Linq-to-SQL? - PullRequest
5 голосов
/ 30 апреля 2009

У меня есть класс Linq-to-SQL, и я хотел бы выполнить некоторую проверку перед сохранением, прежде чем запись будет сохранена в БД. Кроме того, после сохранения я хотел бы получить код обработки после сохранения.

Точно так же, когда запись удаляется, я хотел бы иметь пре- и пост-методы, которые будут вызываться независимо от того, откуда сделан вызов context.SubmitChanges().

Я не вижу никаких методов в сгенерированном коде, которые я мог бы переопределить. Частичного метода OnValidate() может быть достаточно для предварительной обработки, но я хочу иметь возможность отменить сохранение, если определенные условия не выполняются, и я не вижу никаких зацепок для последующей обработки.

Я что-то упустил? Или вы можете порекомендовать другой способ достижения желаемого эффекта?

Спасибо!

Ответы [ 2 ]

7 голосов
/ 30 апреля 2009

Для вставок:

  1. Создайте базовый класс для ваших сущностей.

  2. Добавьте несколько виртуальных методов.

  3. Переопределить DataContext.SubmitChanges.

  4. Вызовите DataContext.GetChangeSet() и переберите вставки, применяя функцию, которую вы определили ранее.

Чтобы отменить изменения, посмотрите на мой метод расширения .

4 голосов
/ 30 апреля 2009

Что ж, создание исключения фактически отменит изменение ... хотя и немного резкое, возможно.

Другая точка расширения заключается в переопределении SubmitChanges в контексте данных, чтобы получить ожидающие изменения (GetChangeSet), внести любые окончательные изменения (возможно, в одитинг), а затем вызвать base.SubmitChanges. Вы можете поместить любые операции после сохранения после this (используя набор изменений, полученный до сохранения).

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