2011-12-31 53 views
5

有沒有一種很好的方法來檢測ObjectContext更改實際提交時的情況?實體框架4:ObjectContext事件成功保存

SavingChanges發生在去數據存儲之前,但我也需要一種方法來知道如果這些更改實際承諾。

在此先感謝 約翰

更新:

我所擁有的是一個代碼第一的DbContext。這被饋入到動態數據中,我發現它使用了DbContext的內部ObjectContext(當我將其轉換爲IObjectContextAdapter時,我可以訪問它)。不調用dbcontext的SaveChanges,而是使用objectcontext的SaveChanges。我想要做的就是在保存完成後通知(即事件SavedChanges),這樣我可以使緩存失效。

+0

如果沒有異常提交這些更改。 – 2011-12-31 12:55:29

+0

我沒有調用SaveChanges()。有一堆可能的SaveChanges()調用者,所以不要去所有這些(如果甚至可能的話)並編輯它們,以便我可以在SaveChanges()後調用。我希望能在DbContext中捕獲它。 – John 2011-12-31 13:00:56

+0

您不能連接到事件SavingChanges嗎? http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.savingchanges.aspx – rene 2011-12-31 13:09:01

回答

7

沒有內置的事件來處理這一點,但你可以在你的導出場境覆蓋SaveChanges方法,你叫base.SaveChanges後觸發特定的任何自定義事件,以自己的上下文類型。

+0

對於DbContext是這樣的,但在DynamicData中,ObjectContext.SaveChanges()被調用,我無法控制它(因此在問題的標題中爲ObjectContext請求)。 – John 2011-12-31 17:53:37

+0

您也可以重寫ObjectContext的SaveChanges(SaveOptions),動態數據接受派生的ObjectContext,所以我沒有看到區別。 – 2011-12-31 20:43:15

+0

我會研究一下。 – John 2011-12-31 20:57:27

0

對不起,但我在答案中找不到解決方案。

讓我按照我的理解(和我的情況)改寫了這個問題:

我使用的動態數據,只接受的ObjectContext的配置;如果你使用的DbContext(這是去與代碼優先的方式),那麼你將不得不通過屬性「IObjectContextAdapater.ObjectContext」這樣的:

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

這裏的問題是,當你保存的變化,不調用MyDbContext的SaveChanges方法,而是調用MyDbContext.ObjectContext中的SaveChanges方法。 因此,在這種情況下,重寫SaveChanges在MyDbContext中是無用的。

我們如何訪問ObjectContext屬性中的SaveChanges並更改行爲,以便編寫我們的自定義代碼?

但無論如何,我找到正確的解決方案是由「雷」到上面的問題,這將在ObjectContext的財產SavingChanges事件的事件處理程序的註釋,這裏又是鏈接:

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

我希望能夠清除它