有没有一种好方法可以检测实际提交ObjectContext
更改的时间?
SavingChanges
,但我还需要一种方法来了解实际提交的更改。
提前致谢 约翰
更新
我所拥有的是代码第一个DbContext。这被提供给动态数据,我发现它使用DbContext的内部ObjectContext(在转换为IObjectContextAdapter时我可以访问它)。不调用dbcontext的SaveChanges,而是使用objectcontext的SaveChanges。我想要做的就是在保存完成后收到通知(即事件SavedChanges),这样我就可以使我的缓存无效。
答案 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
我希望这能清除它