实体框架4:成功保存时的ObjectContext事件

时间:2011-12-31 12:50:10

标签: entity-framework-4

有没有一种好方法可以检测实际提交ObjectContext更改的时间?

在进入数据存储之前发生了

SavingChanges,但我还需要一种方法来了解实际提交的更改。

提前致谢 约翰

更新

我所拥有的是代码第一个DbContext。这被提供给动态数据,我发现它使用DbContext的内部ObjectContext(在转换为IObjectContextAdapter时我可以访问它)。不调用dbcontext的SaveChanges,而是使用objectcontext的SaveChanges。我想要做的就是在保存完成后收到通知(即事件SavedChanges),这样我就可以使我的缓存无效。

2 个答案:

答案 0 :(得分:7)

没有内置事件来处理此问题,但您可以在派生上下文中覆盖SaveChanges方法,并在调用base.SaveChanges后触发特定于您自己的上下文类型的任何自定义事件。

答案 1 :(得分:0)

请原谅,但我在答案中找不到解决方案。

让我根据我的理解(和我的情况)重新解释这个问题:

我正在使用动态数据,它只接受ObjectContext作为配置;如果您使用DbContext(这是使用Code First的方式),那么您将必须传递属性“IObjectContextAdapater.ObjectContext”,如下所示:

DefaultModel.RegisterContext(() => { return ((IObjectContextAdapter) new MyDbContext()).ObjectContext; }, new ContextConfiguration() { ScaffoldAllTables = true });

这里的问题是,当您保存更改时,不会调用MyDbContext的SaveChanges方法,而是动态数据调用MyDbContext.ObjectContext中的方法SaveChanges。 因此,在这种情况下,重写MyDbContext中的SaveChanges是没用的。

我们如何访问ObjectContext属性中的SaveChanges并更改行为以便我们编写自定义代码?

但无论如何,我发现正确的解决方案是“rene”对上述问题的评论,即在ObjectContext属性中为SavingChanges EVENT添加事件处理程序,这里又是链接:

http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.savingchanges.aspx

我希望这能清除它