0

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

有没有人对这种情况有更好的解决方案?

4

2 回答 2

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,则此解决方案将不适合您。

于 2013-05-27T15:37:42.953 回答
0

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

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

于 2010-11-19T11:10:17.347 回答