I'm struggling with the classical audit log problem. I'm using an
NHibernate Interceptor to get called when anything is stored. We have
a three tier architecture and the changes on the entities mostly occur
outside of a session. Now I need to get the original values from the
database to compare with.

NHibernate's cache is becoming a Nightmare. Here is what I tried until
now:

- Open another Session on the same transaction
newSession = factory.OpenSession(OriginalSession.Connection)
Problem: when I dispose the new Session, the transaction gets closed
and my original session can't complete. It actually works if I just
don't dispose the new session. But this does not seam to be a serious
solution to me.

- Open another Session with on a new connection
newSession = factory.OpenSession()
There are several problems with this. First, I can't use database
isolations anymore. It will still be consistent with NHibernates
optimistic locking, but we don't use this for all entities.
The much bigger problem I have is that we use Sqlite for testing,
where I can't open a new connection because Sqlite creates a new
database for every connection. So I need to use the same transaction
and get stuck with the problem above.

- Calling LoadDatabaseSnapshot
OriginalSession.GetSessionImplementation().GetEntityPersister(entity).GetDatabaseSnapshot(...)
You probably can see that I really got desperate. Actually, it would
be VERY NICE to have a method on the session like GetDatabaseSnapshot
and you get a new instance of the entity, not from cache, but from the
database. EntityPersister.GetDatabaseSnapshot has a big drawback. You
get the "dehydrated" state of the entity. This would be actually even
better than a real instance, because you don't need reflection to get
the values. But you won't get any references or lists. So I would need
subsequent queries to get them, which will be complicated (needs NH
metadata inspection) and very slow.

Any idea how to solve this problem would be much appreciated.

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to