2013-02-22 42 views
0

我有一個分佈式數據庫,我認爲可能很高興事件觸發更新,以便所有用戶立即更新其數據,並發現這篇不錯的文章; EF Events實體框架ObjectStateManager未定義

我率領this article相信語境定義爲實體容器名稱,這在我的情況是「CertsModelContainer」

然而,當我嘗試;

using (CertsModelContainer db = new CertsModelContainer()) 
{ 
    db.ObjectStateManager.ObjectStateManagerChanged += (sender, e) => 
    { 
     Console.WriteLine(string.Format(
      "ObjectStateManager.ObjectStateManagerChanged | Action: {0}, Object: {1}", 
      e.Action, 
      e.Element)); 
    }; 
} 

的Visual Studio告訴我,CertsModelContainer不包含定義「ObjectStateManager」

我不知道爲什麼發生這種情況,以及如何解決它,可能有人幫助我嗎?
(我正在使用EF5並使用ModelFirst生成我的數據庫,如果這有什麼區別?)

回答

2

CertsModelContainer是DbContext還是ObjectContext?只有後者纔有ObjectStateManager。

如果您正在使用事務,你可以使用Transaction.TransactionCompleted

+0

我覺得ModelFirst使得它的DbContext ... 是否有任何形式類似於ObjectStateManager擁有的DbContext活動的? – Trent 2013-02-22 02:57:20

+0

你可以重寫SaveChanges並在那裏完成工作。或者也許掛鉤到交易完成。 – 2013-02-22 03:09:41

1

如果您CertsModelContainer是的DbContext,你可以以訪問ObjectStateManager將其轉換爲IObjectContextAdapter。

例如:

using (CertsModelContainer db = new CertsModelContainer()) 
{ 
    ((IObjectContextAdapter)db).ObjectStateManager.ObjectStateManagerChanged += (sender, e) => 
    { 
     Console.WriteLine(string.Format(
      "ObjectStateManager.ObjectStateManagerChanged | Action: {0}, Object: {1}", 
      e.Action, 
      e.Element)); 
    }; 
}