... and if I execute the same query context.Categories.Where(x => x.CategoryID == 1).SelectMany(x => x.Products)
using NH directly (not via OData service), it works fine. The error happens only if send the query through WCF Data Service, and only if I use NHibernate. With EF this is not a problem. Vagif On Mon, May 9, 2011 at 11:31 PM, Vagif Abilov <[email protected]>wrote: > 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.
