I got BackgroundWorker working with NH just now. Not using the same session on more than one thread seems like enough to avoid problems. I suspect webpaul is correct in blaming your problem on lazy loading. You seem to think that, because you don't have any lazy=true, you aren't using lazy loading. In fact, lazy loading is the default behaviour. So unless you have lazy=false, then you are indeed using lazy loading.
On Oct 7, 6:19 am, webpaul <[email protected]> wrote: > Make a simple app with a couple buttons on it that has the same > problem and post a zip file of it > > On Oct 6, 5:07 pm, justin coon <[email protected]> wrote: > > > Is this dead? > > > ________________________________ > > From: webpaul <[email protected]> > > To: nhusers <[email protected]> > > Sent: Friday, October 2, 2009 10:59:00 AM > > Subject: [nhusers] Re: WPF BackgroundWorker and NHibernate > > > Make a simple throw away winforms app which submits the request in the > > background thread so we can see all the repository/session stuff you > > are doing in one place. My suspicion though is that once you do that > > you will see the issue yourself. > > > Keep all the repository/nhibernate stuff in the Process method, > > dispose everything before leaving. In WhenFinished you should only be > > dealing with already populated objects, no DB calls should be > > submitted once you are in that part of the code. > > > On Oct 2, 10:21 am, justin coon <[email protected]> wrote: > > > > Great replies, however im not doing any lazy loading at all, just for > > > that purpose, so that I grab everything at once. There must be something > > > else Im doing wrong, cause I dont have any Lazy=true attributes set > > > anywhere and that is by design in order to help me to be able to do > > > exactly what we are trying to accomplish here...do nHibernate stuff on a > > > background thread....any more thoughts? =\ > > > > ________________________________ > > > From: webpaul <[email protected]> > > > To: nhusers <[email protected]> > > > Sent: Friday, October 2, 2009 9:38:08 AM > > > Subject: [nhusers] Re: WPF BackgroundWorker and NHibernate > > > > Actually, after looking at your original post, I think the issue may > > > be that you have a lazy initialized object or collection and you are > > > accessing it after you have disposed the session or connection > > > somehow. You may want to look into not using lazy init, getting back > > > all the data you need to display at once in the background thread, and > > > then displaying it on the main thread. > > > > I reread some of your responses and it looks like you are trying to > > > take advantage of lazy loading, but I don't know what advantage there > > > is to be had in this scenario. If you continue to use lazy loading > > > you're going to have DB requests going out on the main thread as > > > things are accessed. For the most part I try to keep all that on the > > > background thread so it doesn't tie up the UI which means not using > > > lazy loading in this scenario. > > > > On Oct 2, 9:32 am, webpaul <[email protected]> wrote: > > > > > In the .process you do the work, i.e. using(var repository = new > > > > WhateverRepository()) { return repository.GetAll(); } > > > > > In the WhenFinished, you take that IList and bind it or do whatever > > > > you need to with it. Same story with updates, except I tend to just > > > > return the count of things updated and display that to the user > > > > instead of the list of businessobjects. > > > > > I don't share sessions among repositories unless they need to > > > > participate in the same transaction so I don't run into the problem of > > > > needing to worry about multiple threads accessing the same session > > > > using this method. After reading the other separate post made today I > > > > think this is pretty similar to the option he is suggesting with the > > > > asyncmethod attribute. > > > > > On Oct 1, 4:35 pm, justin coon <[email protected]> wrote: > > > > > > webpaul, > > > > > > Refreshing an activerecord business object with the code i grabbed > > > > > from your post results in this exception. > > > > > "There is already an open DataReader associated with this Command > > > > > which must be closed first" > > > > > All im doing is calling a method thats calls .Refresh() on my > > > > > business object in the .Process() => and then it returns an int > > > > > (since it doesnt support methods with void return type." > > > > > > using > > > > > { > > > > > executer > > > > > .Process(() => > > > > > {}) > > > > > > .WhenFinished(businessObject => > > > > > { > > > > > BuildInvoiceViewModels(); > > > > > > }) > > > > > .Run(); > > > > > } > > > > > } > > > > > } > > > > > { > > > > > }intGetData()this.EndUser.Refresh();return1;(ThreadedExecuter<int> > > > > > executer = newThreadedExecuter<int>(this))returnGetData(); > > > > > > Any thoughts? > > > > > > ________________________________ > > > > > From: justin coon <[email protected]> > > > > > To: [email protected] > > > > > Sent: Thursday, October 1, 2009 4:12:06 PM > > > > > Subject: [nhusers] Re: WPF BackgroundWorker and NHibernate > > > > > > webpaul, > > > > > > thanks so much for your input...however i dont see you using > > > > > nHibernate in your example..this is the kicker to the problem. > > > > > Nhibernate sessions are associated with a thread and thats whats > > > > > causing the problems for me....do you know about nHibernate and doing > > > > > things on another thread? > > > > > Appreciate your help and input very much!! > > > > > > Justin > > > > > > ________________________________ > > > > > From: webpaul <[email protected]> > > > > > To: nhusers <[email protected]> > > > > > Sent: Thursday, October 1, 2009 3:58:27 PM > > > > > Subject: [nhusers] Re: WPF BackgroundWorker and NHibernate > > > > > > I use this on all my winform projects for putting requests on the > > > > > background thread (including nhibernate ones) and then getting the > > > > > results when it is done, without having to mess with invokerequired or > > > > > anything. > > > > > >http://www.codeproject.com/KB/threads/ThreadedExecuter.aspx > > > > > > On Oct 1, 10:02 am, José F. Romaniello <[email protected]> wrote: > > > > > > > I've been very busy this weeks, I will write about it, be patient > > > > > > please. > > > > > > > 2009/9/30 justin coon <[email protected]> > > > > > > > > I would LOVE LOVE LOVE to see someone demonstrate how to do > > > > > > > multithreading with nHibernate on a desktop app(in particular a > > > > > > > WPF > > > > > > > app) > > > > > > > > Ive been at 2 employers, both which would like to figure out if > > > > > > > this > > > > > > > is possible, and if so, how to implement it. Right now i would be > > > > > > > happy with being able to do things in a background worker like > > > > > > > the OP, > > > > > > > but i ran in to the exact same issues. Any chance Jose of you > > > > > > > posting > > > > > > > some code? I would be so en debted. > > > > > > > > Thanks > > > > > > > Justin- Hide quoted text - > > > > > > > - Show quoted text -- Hide quoted text - > > > > > > - Show quoted text -- Hide quoted text - > > > > > - Show quoted text -- Hide quoted text - > > > > - Show quoted text -- Hide quoted text - > > > - Show quoted text - > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
