Как подключить действие после успешного сохранения SaveChanges

Наш продукт должен взаимодействовать с несколькими системами клиент / партнер. Например, когда человек добавляется / обновляется, мы должны уведомлять об изменениях в сторонней системе, например, вызывая веб-службу или создавая файл XML в папке и т. Д.

Нам нужна "ловушка" после того, как SaveChanges успешно сохранил изменения в базе данных.

Можно найти много информации о том, как выполнить бизнес-логику при сохранении изменений (до того, как изменения будут сохранены в базе данных), но меньше о выполнении логики после того, как изменения будут сохранены.

После расследования я думаю использовать следующее:

// Persist data
cxt.SaveChanges(false);
// TODO: execute business logic that can get data changes
// Discard changes and set entities as unmodified
ctx.AcceptAllChanges();

У кого-нибудь есть лучшее решение для этого сценария?

2 ответа

Я знаю, что этот вопрос немного устарел, но подумайте, что я бы добавил его для всех, кто ищет эту тему.

Я бы порекомендовал проверить EFHooks. Официальная версия немного устарела (например, только.NET 4), но я разложил проект и опубликовал новый пакет NuGet, VisoftInc.EFHooks.

Вы можете прочитать больше об обоих пакетах в этом посте: http://blogs.visoftinc.com/2013/05/27/hooking-into-ef-with-efhooks/

По сути, EFHooks позволит вам подключиться к EF (например, PostInsert или PostUpdate) и запустить некоторый код. Крючки Pre / Post для вставки / обновления / удаления.

Следует отметить, что это основано на DbContext, поэтому, если вы все еще используете ObjectContext для EF, это решение не будет работать для вас.

Вы можете переопределить изменения сохранения, а затем выполнять обновление сторонних систем одновременно с сохранением данных в базе данных.

см.: http://thedatafarm.com/blog/data-access/objectcontext-savechanges-is-now-virtual-overridable-in-ef4/

Другие вопросы по тегам