Loading Entities from the First Level Cache
You can use the following code to load all entities of a given type from the first level cache (the entities that were loaded from the current session):
1: //load all entities
2: public static IEnumerable<T> Local<T>(this ISession session)
3: {
4: ISessionImplementor impl = session.GetSessionImplementation();
5: IPersistenceContext ctx = impl.PersistenceContext;
6:
7: return (ctx.EntityEntries.Keys.OfType<T>());
8: }
Or a single entity by its id:
1: //load a single entity by its id
2: public static T GetFromCache<T>(this ISession session, Object id)
3: {
4: ISessionImplementor impl = session.GetSessionImplementation();
5: IPersistenceContext ctx = impl.PersistenceContext;
6:
7: foreach (DictionaryEntry entry in ctx.EntityEntries)
8: {
9: if (entry.Key is T)
10: {
11: if (Object.Equals((entry.Value as EntityEntry).Id, id) == true)
12: {
13: return ((T) entry.Key);
14: }
15: }
16: }
17:
18: return (default(T));
19: }