如何在SaveChanges成功后挂钩动作

时间:2010-11-17 11:21:22

标签: entity-framework savechanges

我们的产品必须与多个客户/合作伙伴系统连接。例如,当添加/更新某人时,我们必须通知对第三方系统的更改,例如通过调用Web服务或在文件夹中创建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 个答案:

答案 0 :(得分:2)

我知道这个问题有点陈旧,但我想将此添加到其他任何搜索此主题的人身上。

我建议您查看EFHooks。官方版本有点陈旧(例如仅限.NET 4),但我已经分叉了该项目并发布了一个新的NuGet包VisoftInc.EFHooks

您可以在这篇文章中详细了解这两个软件包:http://blogs.visoftinc.com/2013/05/27/hooking-into-ef-with-efhooks/

基本上,EFHooks会让你挂钩到EF(例如PostInsert或PostUpdate)并运行一些代码。挂钩是插入/更新/删除的前/后。

有一点需要注意的是,这是基于DbContext的,所以如果你仍在使用ObjectContext for EF,这个解决方案对你不起作用。

答案 1 :(得分:0)

您可以覆盖savechanges,然后在将数据保存到数据库的同时更新第三方系统。

请参阅:http://thedatafarm.com/blog/data-access/objectcontext-savechanges-is-now-virtual-overridable-in-ef4/