This was discussed on the maillist earlier today that the linq provider in
nhibernate does not yet have this functionality. If another method produces
what you need then you should use that query method for now.

John Davidosn

On Thu, Aug 19, 2010 at 3:59 PM, srkirkland <[email protected]> wrote:

> Hello -- I have an "Order" class which has a many-to-one relationship
> OrderedBy to a "Customer" class (picture Northwind).  Now I tell the
> Order mapping to outer-join="true" the OrderedBy relationship, which
> works fine using the criteria and query over methods.  However, when
> using the new NHibernate.Linq Query<T>(), the outer-join="true" is
> ignored, resulting in a select N+1 scenario (selecting one customer
> for each call to order.OrderedBy).  If I use the Fetch() extension
> (redundantly), then the fetch occurs, but (1) I would like to specify
> the join in my mapping, and (2) Fetch does not work in my scenario
> since i need to later order the query (which breaks fetch).
>
> Now before upgrading to NHibernate 3.0Alpha2, the old NHibernate.Linq
> provider would respect the join properly (probably because it used the
> criteria API), but after the upgrade my old code is broken by this
> behavior (causing N+1 everwhere).
>
> So my mapping is basically:
> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
>  <class
>    name="NH3SampleWeb.Models.Order, NH3SampleWeb"
>    table="Orders" >
>    <id name="Id" column="OrderID" unsaved-value="0">
>      <generator class="identity" />
>    </id>
>
>    <property name="OrderDate" />
>    <property name="ShipAddress" />
>
>    <many-to-one name="OrderedBy" column="CustomerID"
> class="NH3SampleWeb.Models.Customer, NH3SampleWeb" outer-join="true"></
> many-to-one>
>
>  </class>
> </hibernate-mapping>
>
> And an example of the divergent query behavior
> //Query NHibernate.Linq provider ignores the outer-join (19 queries)
> var orders =
>
> ExampleApplication.GetCurrentSession().Query<Order>().OrderBy(x=>x.OrderDate).Take(20).ToList();
>
> //QueryOver uses the outer-join correctly (1 query)
> var orders =
>
> ExampleApplication.GetCurrentSession().QueryOver<Order>().OrderBy(x=>x.OrderDate).Asc.Take(20).List();
>
> Now those two queries look almost exactly the same but the Linq one
> produces 19 queries, while queryOver does just one query.  Any help
> you would offer would be appreciated, and I can post the entire source
> if necessary.
>
> Thanks,
>
> Scott
>
> --
> 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]<nhusers%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/nhusers?hl=en.
>
>

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