I have a hierarchial set of parent Foos and child Bars, both of which
extend from the same base type.  In my code, I invoke
"myBase.Children":

    foreach (BaseType base in myBase.Children) // <-- this line throws
the error
    {
        Activate(base, owner);
    }

This code gets an error.  The error indicates that the NHibernate 3.1
generated SQL is wrong (yes, BaseID does appear twice in a row!):

    SELECT BaseType.FooID,
       BaseType.BaseID,
       BaseType.BaseID,
       BaseType.Name,
       Bar.FooID,
    FROM dbo.Bases BaseType
       inner join dbo.Bars Bar
         on BaseType.BaseID = Bar.BarID
    WHERE BaseType.FooID = 136 /* @p0 */

But "FooID" doesn't exist in BaseType.  It *does* exist in Bars.  Why
does NHibernate expect the column on the base class' table instead of
the parent classes table?  For what its worth, "Base" is abstract.

Here's my FluentNHibernate mapping:

    public class FooMap : SubclassMap<Foo>
    {
        public FooMap()
        {
            DiscriminatorValue(3);
            Join("Foos", m =>
            {
                m.KeyColumn("FooID");
                ...
                m.HasMany(x => x.Bars)
                    .KeyColumn("FooID")
                    .AsSet()
                    .Cascade.All()
                    .LazyLoad();
                ...
            });
        }
    }

I've reproduced this in a tinym sloppy integration test where I do
"myBase.Children.Count()" instead, but it fails with the same error.

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