2012-05-09 3 views
0

UpdateЧтение удален объект из первого тайника после удаления в 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); 
} 

Если честно: я не сделал это сам, но, насколько я могу видеть, он должен хорошо работать. Не возитесь с реализацией сеанса и контекстом, вы можете сломать все, если пишете эти классы.

Другим более сложным, но менее «хакерским» подходом является регистрация обработчика удаления. Проблема в том, что а) она выполняется, когда объект удаляется в базе данных (например: когда сеанс очищается) и b) он должен быть зарегистрирован во время настройки фабрики сеансов, что усложняет реализацию.

Смежные вопросы