Gunnar: I just did that: https://nhibernate.jira.com/browse/NH-3354
It was (almost) immediately closed as a duplicate of https://nhibernate.jira.com/browse/NH-3333, so hopefully it will be resolved soon! Paul: Just out of curiosity, which framework did you end up with, Entity Framework? Thanks, Mattias Den tisdagen den 11:e december 2012 kl. 00:35:41 UTC+1 skrev Gunnar Liljas: > > This group and the overall project is in much better shape today, than > it was just a year ago. > > The error seems to be due to a malfunctioning projection, and is most > likely a bug in the Linq provider. It would be most helpful if you > could create a test case (the generated Linq expression is probably a > sufficient starting point) and file a JIRA report. > > > > 2012/12/10 Paul Brousseau <[email protected] <javascript:>>: > > Hello Mattias! > > > > Unfortunately, no, I never resolved the problem. And given the lack of > > response in this Google Group, I threw nHibernate out the window and > used a > > different framework instead. As I recall, the problem existed some time > ago > > when I found it, and I'm pretty disappointed in the nHibernate project > to > > find that, a full year later, the problem still exists. > > > > Sorry I couldn't be of any help. :( > > > > > > On Monday, December 10, 2012 12:51:21 AM UTC-8, scim wrote: > >> > >> Hi, Paul! > >> > >> I have the exact same problem as you when trying to execute a similar > >> query over odata. Have you managed to resolve the issue yet? > >> > >> I've narrowed it down to the same line of code as you, ie when it tries > to > >> transform the query to an ExpandedWrapper. Nhibernate tries to > transform > >> pairs of (in your case) Widget/Designer, however the Widgets-property > of > >> Designers expects an List of Widgets and not multiple instance of the > >> Widget. > >> > >> Thanks in advance, > >> Mattias > >> > >> Den fredagen den 16:e december 2011 kl. 21:12:26 UTC+1 skrev Paul: > >>> > >>> I'm pretty new to nHibernate, so I'm most likely doing something very > >>> dumb. I am using nHibernate 3.2 GA. I have two objects, "Widget" and > >>> "Designers". A widget knows its designer, and it has only one > >>> designer. A designer has many widgets, and it know of all of them. > >>> Thus, these entities: > >>> > >>> public class WidgetEntity > >>> { > >>> public virtual Guid Id { get; set; } > >>> public virtual DesignerEntity Designer { get; set; } > >>> } > >>> > >>> public class DesignerEntity > >>> { > >>> public virtual Guid Id { get; set; } > >>> public virtual string Name { get; set; } > >>> public virtual string Address { get; set; } > >>> > >>> public virtual ICollection<WidgetEntity> Widgets { get; set; } > >>> } > >>> > >>> I've created the following two mappings: > >>> > >>> <hibernate-mapping xmlns='urn:nhibernate-mapping-2.2' > >>> assembly='ODataTest' namespace='ODataTest' > > >>> <class name='WidgetEntity' table='WidgetEntity' > > >>> <id name='Id' column='Id' > > >>> <generator class='guid.comb' /> > >>> </id> > >>> <many-to-one name='Designer' class='DesignerEntity' > >>> column='DesignerId' foreign-key='FK_DESIGNER_WIDGETS' cascade='save- > >>> update' /> > >>> </class> > >>> </hibernate-mapping> > >>> > >>> <hibernate-mapping xmlns='urn:nhibernate-mapping-2.2' > >>> assembly='ODataTest' namespace='ODataTest'> > >>> <class name='DesignerEntity' table='DesignerEntity'> > >>> <id name='Id' column='Id'> > >>> <generator class='guid.comb' /> > >>> </id> > >>> <set lazy='true' name='Widgets' inverse='true'> > >>> <key column='DesignerId' /> > >>> <one-to-many class='WidgetEntity' /> > >>> </set> > >>> </class> > >>> </hibernate-mapping> > >>> > >>> Basic queries for either widgets or designers work great; no > >>> problems. But I am using this in context of an OData server, and so > >>> when I am issue a command like > >>> http://[SERVER]/WidgetService/Designers(guid'[ID]')/?$expand=Widgets, > >>> I get an exception back. OData is by-and-large hiding the nHibernate > >>> LINQ command, but inferring from stepping through the code, I think > >>> this is the exact command / expression being passed to > >>> DefaultQueryProvider.Execute: > >>> > >>> > >>> > value(NHibernate.Linq.NhQueryable`1[ODataTest.DesignerEntity]).Where(element > > >>> => (element.Id == d5e3ce36-b0d0-49e7-b104-28029ff59414)).Select(p => > >>> new ExpandedWrapper`2() {ExpandedElement = p, Description = "Widgets", > >>> ProjectedProperty0 = p.Widgets}) > >>> > >>> The resulting SQL query is this: > >>> > >>> exec sp_executesql N'select designeren0_.Id as Id1_0_, widgets1_.Id as > >>> Id0_1_, widgets1_.DesignerId as DesignerId0_1_ from DesignerEntity > >>> designeren0_ inner join WidgetEntity widgets1_ on > >>> designeren0_.Id=widgets1_.DesignerId where designeren0_.Id=@p0',N'@p0 > >>> uniqueidentifier',@p0='D5E3CE36-B0D0-49E7-B104-28029FF59414' > >>> > >>> I hacked out some columns for brevity sake. My SQL server likes this > >>> just fine, and returns two rows. However, when attempting to > >>> transform the SQL result into my returned data, I get an exception. > >>> What it comes down to is an InvalidCastException: "Unable to cast > >>> object of type 'ODataTest.WidgetEntity' to type > >>> 'System.Collections.Generic.ICollection`1[ODataTest.WidgetEntity]'." > >>> The exact location is in ResultTransformer.cs, line 25: > >>> > >>> return _itemTransformation == null ? tuple : > >>> _itemTransformation.DynamicInvoke(new object[] {tuple}); > >>> > >>> _itemTransformation is "{Method = > >>> > >>> > {System.Data.Services.Internal.ExpandedWrapper`2[ODataTest.DesignerEntity,System.Collections.Generic.IEnumerable`1[ODataTest.WidgetEntity]] > > > >>> lambda_method(System.Runtime.CompilerServices.Closure, > >>> System.Object[])}}". tuple is an array of two objects. The first is > >>> my DesignerEntity, complete with Widgets ICollection filled in. The > >>> second is a single WidgetEntity, the values of which correlate to the > >>> first SQL result row. > >>> > >>> At this point, I have no idea what's going on. :) I am supposing > >>> that the problem is in my hbm files. I have tried setting up many-to- > >>> one without cascade (which, I would think, doesn't matter here since > >>> I'm only doing a select). I have tried setting up the one-to-many as > >>> a bag, and both with and without the inverse. > >>> > >>> Apologies if I'm missing some information, or this is too much > >>> information. Any help would be appreciated... I've been pulling my > >>> hair for a couple of days on this. :) Thanks!! > > > > -- > > You received this message because you are subscribed to the Google > Groups > > "nhusers" group. > > To view this discussion on the web visit > > https://groups.google.com/d/msg/nhusers/-/_HXMaOXs88sJ. > > > > To post to this group, send email to [email protected]<javascript:>. > > > To unsubscribe from this group, send email to > > [email protected] <javascript:>. > > 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 view this discussion on the web visit https://groups.google.com/d/msg/nhusers/-/NfOc7qfNg44J. 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.
