I try to implement Consumer(Multiple Thread), Producer(Single Thread that 
is main one) architecture;
Producer thread owns it' NH session and retrieves data and if it' fetch 
enough to process(limited by parameter like 500 record) send to Consumer 
thread (consumer owns another session) to process them.

While Consumer and producer sessions both active at the same time, to 
process the records I need to "Session.Evict(x)" for all records.

To access oldState for logging at Post Events I need to Consumer thread 
session attach the records with below code without access to second level 
cache nor database.

public static T Attach<T>(this ISession session, T entity)
        {
            ISessionImplementor sessionImplementor = 
session.GetSessionImplementation();
            IEntityPersister persister = 
sessionImplementor.GetEntityPersister(NHibernateProxyHelper.GuessClass(entity).FullName,
 entity);
            Object[] loadedState = persister.GetPropertyValues(entity);
            Object id = persister.GetIdentifier(entity);
            EntityEntry entry = 
sessionImplementor.PersistenceContext.AddEntry(entity, Status.Loaded, 
loadedState, null, id, null, LockMode.None, true, persister, true, true);
            return entity;
        }

Everything is fine but proxy objects stores "_session" in private variables 
and it's null because I evicted by retrieval session.

How to set "_session" variable in proxy classes at entity level, is there 
any function to do that.
If I use reflection to get Proxy Properties I am afraid for bad performance 
and it needed to be recursive.
If I can get entity owned proxy properties with recursive I can call 
ILazyInitializer.SetSession?

Am I doing something wrong because I need very good performance using 
parallel threads.

NHibernate.Proxy.AbstractLazyInitializer.Initialize() in 
C:\nhibernate-master\nhibernate-core-master\src\NHibernate\Proxy\AbstractLazyInitializer.cs:line
 115
   at NHibernate.Proxy.AbstractLazyInitializer.GetImplementation() in 
C:\nhibernate-master\nhibernate-core-master\src\NHibernate\Proxy\AbstractLazyInitializer.cs:line
 191
   at MemberDefinitionProxy.get_IsAdmin()
   at Framework.Batch.Eod.ConsumerProducerBatch.Consume(List`1 items) in 
D:\Framework.Batch\Eod\SampleEodBatch.cs:line 85
   at 
Framework.Facilities.Batch.BaseBatch`1.<>c__DisplayClass26_0.<RunConsume>b__1() 
in D:\Framework.Facilities.Batch\BaseBatch.cs:line 289
   at Framework.Facilities.Batch.BaseBatch.Handle(UnitOfWorkAttribute 
unitOfWork, Action T0, Action T1, Action T2) in 
D:\Framework.Facilities.Batch\BaseBatch.cs:line 54

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/nhusers.
For more options, visit https://groups.google.com/d/optout.

Reply via email to