Как подключить действие после успешного сохранения SaveChanges - PullRequest
0 голосов
/ 17 ноября 2010

Наш продукт должен взаимодействовать с несколькими системами клиент / партнер. Например, когда человек добавляется / обновляется, мы должны уведомлять об изменениях в сторонней системе, например, вызывая веб-службу или создавая файл 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 ]

2 голосов
/ 27 мая 2013

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

Я бы порекомендовал проверить 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, это решение не будет работать для вас.

0 голосов
/ 19 ноября 2010

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

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

...