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]>: > 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]. > 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.
