2014-02-09 34 views
6

我想訂閱我的上下文以下this,像這樣的OnjectMaterialized事件:使用EF6訂閱ObjectMaterialized的位置?

((IObjectContextAdapter)this).ObjectContext 
          .ObjectMaterialized += ObjectContext_OnObjectMaterialized; 

但我使用EF6和對崗位不存在在這個版本中提到的OnContextCreated方法。

我試過在上下文構造函數中訂閱物化事件,但是如果數據庫被刪除(我們在集成測試中經常這樣做),事件不再訂閱。我們嘗試在Database.Delete()之後再次訂閱,但它也不起作用。

所以我的問題是,我應該在哪裏使用實體框架6正確訂閱ObjectMaterialized事件?

+0

正如我猜我會說,他們是抽象到['Interception'](https://entityframework.codeplex.com/wikipage ?title =攔截)API。但我會問問題的根源是什麼,也許有更好的方法來解決它比訂閱事件。 –

+0

@BradChristie我在我的一個POCO類中有一個屬性,這個屬性沒有被映射,我想構建它並儘快使其可用(它從本地上下文中加載其他實體)。我假設越早會在ObjectMaterialized上。當然還有其他的方法可以做到這一點,但是既然事件在那裏,我想看看是否可以這樣做。它的工作原理除了上面提到的刪除數據庫時出現的問題之外,事件會丟失,直到另一個上下文被實例化。 – fdiaz

回答

1

你可以簡單地繼承上下文並在構造函數中訂閱事件嗎? (我做這個和它的作品對我的情況。情況因人而異。)

0
ModelContext modelContext = new ModelContext(); //Inherit DbContext 
IObjectContextAdapter contextAdapter = modelContext; 
ObjectContext objectContext = contextAdapter.ObjectContext;