Because queries do not look at the session cache

On Mon, Mar 23, 2009 at 12:58 PM, James Allen <
[email protected]> wrote:

>  Sorry, I’m not making myself clear. I understand that UoW has a FlushMode
> of commit. The bit that I don’t understand is **why do I need to flush**.
> It looks to me that Rhino UoW uses the same session as Rhino Repository, so
> should be able to ‘see’ unsaved / unflushed / uncommitted entities in the
> session cache. Obviously I am wrong (because the behaviour does not reflect
> this) but I am trying to understand why I am wrong – I suspect that
> Respository<T>.Save and UnitOfWork.Current.Linq are in fact using entirely
> different sessions?
>
>
>
> *From:* [email protected] [mailto:
> [email protected]] *On Behalf Of *Ayende Rahien
> *Sent:* 23 March 2009 16:45
> *To:* [email protected]
> *Subject:* [rhino-tools-dev] Re: Session cache, Repository and Linq2Nh
>
>
>
> That is because I am explicitly setting the session.FlushMode to CommitOnly
>
> This means that a query is not going to cause a flush.
>
> That, in turn, means that it is not there for the db to find the value.
>
> since NH has not idea what the expected values are, it can't figure out
> that it already has this value, and you get empty
>
> On Mon, Mar 23, 2009 at 12:42 PM, Junior <[email protected]>
> wrote:
>
>
> But from what I understand, I shouldnt need to flush at all. If you
> are using the same session, you have previous saves / updates in the
> session cache, so queries will retrieve objects from the cache without
> needing to flush to the db. This is why I don't need to flush before
> calling "Car car = Repository<Car>.Get(1)". Why does the same not
> apply to calling "from car in UnitOfWork.CurrentSession.Linq<Car> ...
> etc"? (this is all happening in the same code block)
>
>
> On Mar 23, 4:38 pm, Ayende Rahien <[email protected]> wrote:
> > Rhino Tools set the flush mode to commit, instead of auto.This is why you
> > are seeing that.
> >
>
> > On Mon, Mar 23, 2009 at 11:47 AM, Junior <
> [email protected]>wrote:
>
> >
> >
> >
> >
> >
> > > Hi all,
> >
> > > I am trying to understand session management in Rhino Commons
> > > Repository<T> and UnitOfWork, I have tried my best at understanding
> > > the source code, but feel I am misunderstanding some concepts. Briefly
> > > my problem is this:
> >
> > > I save an entity using Repository<T>:
> > > Repository<Car>.Save(new Car{Id = 1});
> >
> > > I can then retrieve the car like so:
> > > Car car = Repository<Car>.Get(1);
> >
> > > Thanks to the Session cache, the car is retrieved without having to
> > > flush the session / commit a tx / write to the database.
> > > However when I then try to query Car using NHibernate Linq provider:
> >
> > > IQueryable<Car> cars = (from car in UnitOfWork.CurrentSession.Linq<Car>
> > > ()
> > > select car);
> >
> > > I get nothing, unless I explicity flush the session / commit a tx
> > > after saving the car. I understand that UoW requires you to commit the
> > > transaction before it writes the changes to the db. However as I also
> > > understand from looking at the Rhino Commons source code and the
> > > NHibernate Contrib code, I should not have to do this (flush the
> > > changes) as the Linq provider will use the same session and thus
> > > should be able to 'see' the session cache:
> >
> > > NHRepsoitory uses this:
> >
> > > protected virtual ISession Session
> > > {
> > >    get { return UnitOfWork.CurrentSession; }
> > > }
> >
> > > And NHibernateExtensions Linq method is also passed
> > > UnitOfWork.CurrentSession. So my question is this - is this the
> > > expected behaviour (having to flush a repository save before using
> > > Linq to NHibernate)? If so, why? Or am I misunderstanding something
> > > and need to take a deeper look into the code?
> >
> > > Many thanks for any help!
> >
>
> > > James- Hide quoted text -
> >
> > - Show quoted text -
>
>
>
>
>
>
>
>
> ______________________________________________________________________
> This email has been scanned by the MessageLabs Email Security System.
> For more information please visit http://www.messagelabs.com/email
> ______________________________________________________________________
>
> Save paper, please think twice before printing this email.
>
> Newcastle Technopole | Kings Manor | Newcastle upon Tyne | NE1 6PA
> T. 0191 201 2111 | F. 0191 201 2127 | Service Desk Direct Line. 0191 201
> 2121
> Perfect Image Ltd. Registered in England & Wales. Company Registration
> Number: 2650067
> Registered Office: Newcastle Technopole, Kings Manor, Newcastle upon Tyne
> NE1 6PA
>
> This e-mail is confidential and intended solely for the use of the
> individual to whom it is addressed. Any views or opinions presented are
> solely those of the author and do not represent those of Perfect Image Ltd.
> If you are not the intended recipient, please notify us at
> [email protected] and be advised that you have received this mail
> in error and that any use, dissemination, forwarding, printing or copying of
> this e-mail is strictly prohibited.
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Rhino Tools Dev" 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/rhino-tools-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to