Hi Ricardo,
Projection is enabled in my service and if I use Entity Framework instead of
NH, the following query works fine:
Categories.Where(x => x.CategoryID == 1).SelectMany(x => x.Products)
But NH returns me the following error:
<message>element.Products is not mapped
[.SelectMany[Northwind.NHibernate.MsSql.Categories,Northwind.NHibernate.MsSql.Products](.Where[Northwind.NHibernate.MsSql.Categories](NHibernate.Linq.NhQueryable`1[Northwind.NHibernate.MsSql.Categories],
Quote((element, ) => (Equal(element.CategoryID, p1))), ), Quote((element,
) => (Convert(element.Products))), )]</message>
<type>NHibernate.Hql.Ast.ANTLR.QuerySyntaxException</type>
What I can do is to issue other query that works:
Categories.Expand("Products").Where(x => x.CategoryID == 1)
But this one does not project Products, it just includes them in the result
set. So I wonder if DataService needs more tweaking for NHibernate to
correctly handle projection.
Vagif
On Mon, May 9, 2011 at 6:07 PM, Ricardo Peres <[email protected]> wrote:
> WCF Data Services supports projections (server-side, not client-side,
> this you can always do with LINQ to Objects), but you have to enable
> them:
>
> public static void InitializeService(DataServiceConfiguration config)
> {
> config.DataServiceBehavior.MaxProtocolVersion =
> DataServiceProtocolVersion.V2;
> config.DataServiceBehavior.AcceptProjectionRequests = true;
> ...
> }
>
> Also, I wrote a post on WCF Data Services debugging, a long time ago:
>
> http://weblogs.asp.net/ricardoperes/archive/2009/11/01/debugging-ado-net-data-services.aspx
>
> RP
>
> On May 9, 2:47 pm, Vagif Abilov <[email protected]> wrote:
> > Hi,
> >
> > After resolving my issue with navigation to referenced entities (thanks
> > Ricardo), I am now testing possibility to fetch in OData only referenced
> > entities. The following query fetches main entity and it's Products
> > relation:
> > Categories.Expand("Products").Where(c => c.CategoryID == 1)
> > (corresponds
> tohttp://localhost:50555/NorthwindEntityFrameworkModelFirstMsSql.svc/Ca...
> > )
> >
> > This is not what I want: I only need Products. I don't want to do
> projection
> > on the client.
> >
> > When using Entity Framework, I can use the following (weird) C# syntax in
> > client code:
> > from c in Categories.Where(c => c.CategoryID == 1) select new { Products
> =
> > c.Products }
> >
> > But this does not work in NHibernate! I am getting NotImplemented
> exception:
> >
> > <message xml:lang="nb-NO">Not Implemented</message>
> > <innererror>
> > <message>([100001] As Categories)</message>
> > <type>System.NotSupportedException</type>
> > ...
> > </message>
> >
> > And using Expand("Products") does not seem to support projections:
> > Categories.Expand("Products").Where(c => c.CategoryID == 1).Select(x =>
> > x.Products) results in "The method 'Select' is not supported." both for
> > NHibernate and Entity Framework.
> >
> > Do you know about any workaround for this that will work in NHibernate?
> >
> > Thanks in advance
> >
> > Vagif
>
> --
> 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.
>
>
--
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.