2012-05-09 120 views
0

更新讀NHibernate的刪除對象從第一緩存中刪除後

我想找出是否一個實例已經從NHibernate的第一緩存

private static void Evict() 
     { 
      using (var session = sessionFactory.OpenSession()) 
      using (var transaction = session.BeginTransaction()) 
      { 
       var customers = session.Query<Customer>().ToList(); 

       var customer = customers[0]; 
       session.Delete(customer); 
       transaction.Commit(); 

       //how to find out whether or not customers[0] is still in session. 
      } 

     } 
+0

這應該用於什麼? –

+0

僅用於測試 – Pingpong

+0

你真的想測試什麼? –

回答

0

這是有道理的刪除。當您說var customer = customers [0]時,您將客戶的副本設置爲該變量; 您在變量設置後刪除它。聲明:

Console.WriteLine(customers[0].CustomerName); 

不使用緩存 - 它使用的是變量值。

+0

我知道這一點。但我想讀取緩存中的一個。 – Pingpong

+0

我不明白你想達到什麼目的。 – Chev

+0

請參考我的更新 – Pingpong

0

你可以嘗試「黑客」的會話實現:

var sessionImpl = (ISessionImplementor)session; 
var sessionContext = sessionImpl.PersistenceContext; 
var entry = sessionContext.GetEntry(customer); 
if (entry.Status == Status.Deleted) 
{ 
    Console.WriteLine("Customer {0} is deleted", customer.Name); 
} 

說實話:我沒有這個做我自己,但據我可以看到它應該很好地工作。不要混淆會話實現和上下文,如果寫入這些類,則可以破壞所有內容。

另一個更復雜但也更簡單的方法是註冊一個刪除處理程序。問題是:a)在數據庫中刪除實體時執行它(例如:會話刷新時)以及b)需要在會話工廠的配置時註冊,這使實現變得困難。

相關問題