我们的产品必须与多个客户/合作伙伴系统连接。例如,当添加/更新某人时,我们必须通知对第三方系统的更改,例如通过调用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();
有没有人有更好的解决方案呢?
答案 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/