-1

更新

我想知道一个实例是否已从 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.
            }

        }
4

2 回答 2

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);
}

老实说:我自己没有这样做,但据我所知,它应该运作良好。不要搞乱会话实现和上下文,如果写入此类,您可能会破坏一切。

另一种更复杂但也不那么“hacky”的方法是注册一个删除处理程序。问题是a)它在数据库中删除实体时执行(例如:刷新会话时)和b)它需要在会话工厂的配置时注册,这使得实现变得困难。

于 2012-05-10T06:56:42.390 回答
0

这是有道理的。当您说 var customer = customers[0]; 时,您正在将客户的副本设置为变量。您在设置变量后将其删除。该声明:

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

没有使用缓存 - 它正在使用变量值。

于 2012-05-09T06:57:54.027 回答