Thank you for the answer.
I have understood that the dirty check is what cause the problem.
The use of a stateless session is the only way to remove dirty
checking of all objects in a session?
But with stateless session, there is no more lazy load...
the flushmode.never is another way, but if, at the end, I have to save
only one object that I previously load, when I call the flush,
nhibernate will make the dirty check on all its objects

is there a way to only disable the dirty checking from the elements
retrieved from a query without losing lazy load? Or removing the use
of dirty checking in the session factory, so that for an update, I
have to explicit calls SaveorUpdate?


thank you
Luca


On 26 Ott, 20:50, Oskar Berggren <[email protected]> wrote:
> Let me guess: You are loading _MANY_ objects? If you then have
> FlushMode.Auto NHibernate will dirty check all objects already loaded
> in the ISession for every subsequent query. As you notice towards the
> end, this isn't affected much by transaction or not.
>
> You can try with FlushMode.Commit (and one single transaction instead
> of one for each call) or even FlushMode.Never since this is readonly.
> Or you can try with IStatelessSession.
>
> For reports, one could also think about whether to use queries with
> projections of the actual data needed, instead of loading the
> entities. Can be faster, but it makes logic in the entity classes
> unavailable when building the report.
>
> /Oskar
>
> 2010/10/26 Luca7993 <[email protected]>:
>
>
>
> > Hi
> > I read almost everywhere that I always should begin and commit
> > nhibernate transaction even if we make a reading query.
> > but I have a strange problem using explicit transactions and I think
> > there is something that I haven't understood with Nhibernate and
> > transactions:
>
> > I have sql server on my machine.
> > In my windows application, I have to create a report and I follow this
> > steps (I'm using NHibernate 3.0 beta):
>
> > -create and open a session
> > -get a list of items A with a GetAll
> > -I have a loop for each A item, and take a list of B items filtered by
> > A (from database)
> > -after that i create a file excel.
> > -close the session
>
> > I'm using always the same session for everything.
> > the getall is wrapped in a nhibernate transaction (using tx =
> > session.begintransaction() ..... tx.Commit())
> > as I read, I should wrap in a transaction also each query that take
> > list of B items.
> > But if I wrap in transactions, the performance slow down at each
> > passage in the loop...the query takes about 10ms..after 20-30 times,
> > it takes about 100ms...after 100 times about 200ms and go on...(the
> > effective cost of query is still about 10ms)
> > If I don't wrap the queries in transactions (but always using the same
> > session),everything is ok and each query alwyas takes about 10ms...
>
> > If I use instead, different session for each calls to retrieve B
> > items, even if I use transaction, there is no problem.
>
> > I tried to disable the second cache, but it's always the same
>
> > which is my mystake?
>
> > thank you
>
> > --
> > 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 
> > athttp://groups.google.com/group/nhusers?hl=en.- Nascondi testo citato
>
> - Mostra testo citato -

-- 
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