c# – NHibernate Evict按类型而不是实例

前端之家收集整理的这篇文章主要介绍了c# – NHibernate Evict按类型而不是实例前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在迁移这样的应用程序:
  1. Vehicle v = null;
  2. using (ISession session = MyNHibernateSession())
  3. {
  4. v = Vehicle.FindById(1);
  5. }
  6.  
  7. using (ISession session = MyNHibernateSession())
  8. {
  9. // somwwhere into these4 lines Vehicle comes Finded
  10. DoSomething();
  11. DoSomething2();
  12. DoSomething3();
  13. DoSomething4();
  14. DoSomething5();
  15. DoSomething6();
  16.  
  17. // if i do this i get an error "another object with the same id etc etc etc
  18. session.Update(v);
  19. }

我不想这样做:

  1. session.EvictAllByType(typeof(Vehicle));

可能吗?怎么样?,
谢谢

解决方法

这个问题可能已经过时了,但我在搜索这个问题时最终到了这里.所以这就是我最终做到的方式:
  1. public static void EvictAll<T>(this ISession session,Predicate<T> predicate = null)
  2. {
  3. if (predicate == null)
  4. predicate = x => true;
  5. foreach (var entity in session.CachedEntities<T>().Where(predicate.Invoke).ToArray())
  6. session.Evict(entity);
  7. }
  8.  
  9. public static IEnumerable<T> CachedEntities<T>(this ISession session)
  10. {
  11. var sessionImplementation = session.GetSessionImplementation();
  12. var entities = sessionImplementation.PersistenceContext.EntityEntries.Keys.OfType<T>();
  13. return entities;
  14. }

猜你在找的C#相关文章