I'm just going to take a stab... it looks like the problem is that you need
to tell FNH that you want the Debt class mapped even though it is abstract.
You do this by using IncludeBase<Debt>() in the same place as your
IgnoreBase calls (and make sure you don't call IgnoreBase<Debt>(), of
course).

On Sat, Jan 16, 2010 at 5:57 AM, Mark Nijhof <[email protected]> wrote:

> Hmm I changed this:
>
>               s.IsDiscriminated = type => type == typeof (BoatLoan);
>               s.IsDiscriminated = type => type == typeof (CarLoan);
>               s.IsDiscriminated = type => type == typeof (CreditCard);
>               s.IsDiscriminated = type => type == typeof (Mortgage);
>               s.IsDiscriminated = type => type == typeof (UnsecuredLoan);
>
> To be one statement, but that didn't work either
>
> -Mark
>
>
> On Fri, Jan 15, 2010 at 7:53 PM, Mark Nijhof <[email protected]>
> wrote:
> > I can't get either one of these to work:
> >
> >    public class DebtSubclassConvention : ISubclassConvention//,
> > ISubclassConventionAcceptance
> >    {
> >        public void Apply(ISubclassInstance instance)
> >        {
> >            if (instance.EntityType.BaseType == typeof(Debt))
> >                instance.DiscriminatorValue(instance.EntityType.Name);
> >        }
> >
> >        public void Accept(IAcceptanceCriteria<ISubclassInspector>
> criteria)
> >        {
> >            criteria.Expect(subclass =>
> > Type.GetType(subclass.Name).BaseType == typeof(Debt));
> >        }
> >    }
> >    public class DebtJoinedSubclassConvention :
> > IJoinedSubclassConvention//, IJoinedSubclassConventionAcceptance
> >    {
> >        public void Apply(IJoinedSubclassInstance instance)
> >        {
> >            //if (instance.EntityType.BaseType == typeof(Debt))
> >            //    instance.DiscriminatorValue(instance.EntityType.Name);
> >        }
> >
> >        public void
> > Accept(IAcceptanceCriteria<IJoinedSubclassInspector> criteria)
> >        {
> >            criteria.Expect(subclass =>
> > Type.GetType(subclass.Name).BaseType == typeof(Debt));
> >        }
> >    }
> >
> > I placed break points in them and they don't seem to be called.
> >
> > I also tried:
> >
> >    public class DebtOverride : IAutoMappingOverride<Debt>
> >    {
> >        public void Override(AutoMapping<Debt> mapping)
> >        {
> >            mapping.SubClass<BoatLoan>("BoatLoan");
> >            mapping.SubClass<CarLoan>("CarLoan");
> >            mapping.SubClass<CreditCard>("CreditCard");
> >            mapping.SubClass<Mortgage>("Mortgage");
> >            mapping.SubClass<UnsecuredLoan>("UnsecuredLoan");
> >        }
> >    }
> >
> > Which also doesn't get called, so I am pretty sure there is something
> > wrong with my setup :)
> >
> >        public EntityPersistenceModel()
> >        {
> >            AddEntityAssembly(typeof(DomainEntity).Assembly);
> >
> >            Alterations(x => x.Add<AutoMapAlteration>());
> >
> >            Setup(s =>
> >            {
> >                s.FindIdentity = prop => prop.Name == "Id" &&
> > prop.PropertyType == typeof(Guid);
> >                s.IsComponentType = type => type.BaseType ==
> > typeof(ComponentBaseForNHibernate);
> >                s.IsDiscriminated = type => type == typeof (BoatLoan);
> >                s.IsDiscriminated = type => type == typeof (CarLoan);
> >                s.IsDiscriminated = type => type == typeof (CreditCard);
> >                s.IsDiscriminated = type => type == typeof (Mortgage);
> >                s.IsDiscriminated = type => type == typeof
> (UnsecuredLoan);
> >            });
> >
> >            IgnoreBase<DomainEntity>();
> >            //IgnoreBase<Debt>();
> >            IgnoreBase<SharedOwnershipIdentifierBase>();
> >            IgnoreBase(typeof(SharedOwnershipIdentifierBaseLogic<>));
> >
> >            Conventions.Setup(f =>
> > f.AddFromAssemblyOf<IdentityColumnConvention>());
> >
> >            UseOverridesFromAssemblyOf<IdentityColumnConvention>();
> >        }
> >
> > I also tried to ignore the base but it all doesn't matter what I try :(
> >
> > -Mark
> >
> > On Fri, Jan 15, 2010 at 6:38 PM, Mark Nijhof <[email protected]>
> wrote:
> >> James,
> >>
> >> Should I use a MapClass to manually add the sub classes? Or should I
> >> use an override convention on the BaseClass?
> >>
> >> -Mark
> >>
> >> On Fri, Jan 15, 2010 at 1:12 AM, Mark Nijhof <[email protected]>
> wrote:
> >>> Hi James,
> >>>
> >>> Thanks for the suggestion, I'll give #1 a good try tomorrow. By doing
> >>> so is it still possible to have these in different tables vs using a
> >>> discriminator?
> >>>
> >>> -Mark
> >>>
> >>>
> >>> On Thu, Jan 14, 2010 at 4:32 PM, James Gregory <jagregory.com@
> gmail.com> wrote:
> >>>> I've not had a great deal of experience with what I'm about to
> suggest, but
> >>>> I know at least Hudson has dealt with it in the past so he might weigh
> in
> >>>> later.
> >>>> Your entities aren't actually related as far as NHibernate is
> concerned.
> >>>> They're not being mapped as subclasses of anything, so NH doesn't know
> how
> >>>> to pull them all together in one query. There are really two ways to
> handle
> >>>> this:
> >>>>
> >>>> Map Debt and have all descendants be joined-subclasses, then NH should
> be
> >>>> happy with your association because it knows how they're all linked
> together
> >>>> Map your collection as a many-to-any, which is a polymorphic
> association
> >>>> which allows for these kind of things; however, they can be pretty
> tricky to
> >>>> figure out how to put together.
> >>>>
> >>>> I would personally side with 1, but that's just me. As far as I'm
> aware we
> >>>> don't support many-to-any's in FNH, so you'd have to map that
> particular
> >>>> entity with hbm.xml.
> >>>> On Thu, Jan 14, 2010 at 2:11 PM, Mark Nijhof <[email protected]>
> wrote:
> >>>>>
> >>>>> Hi,
> >>>>>
> >>>>> I have an issue mapping an IList<BaseClass> where the different
> >>>>> concrete types are in the list. I think I need a discriminator but I
> >>>>> am not sure actually.
> >>>>>
> >>>>> Used CodePast for some syntax highlighting:
> http://codepaste.net/k97k9y
> >>>>>
> >>>>> -Mark
> >>>>>
> >>>>> --
> >>>>> You received this message because you are subscribed to the Google
> Groups
> >>>>> "Fluent NHibernate" group.
> >>>>> To post to this group, send email to
> [email protected].
> >>>>> To unsubscribe from this group, send email to
> >>>>> [email protected]<fluent-nhibernate%[email protected]>
> .
> >>>>> For more options, visit this group at
> >>>>> http://groups.google.com/group/fluent-nhibernate?hl=en.
> >>>>>
> >>>>>
> >>>>>
> >>>>
> >>>>
> >>>> --
> >>>> You received this message because you are subscribed to the Google
> Groups
> >>>> "Fluent NHibernate" group.
> >>>> To post to this group, send email to
> [email protected].
> >>>> To unsubscribe from this group, send email to
> >>>> [email protected]<fluent-nhibernate%[email protected]>
> .
> >>>> For more options, visit this group at
> >>>> http://groups.google.com/group/fluent-nhibernate?hl=en.
> >>>>
> >>>>
> >>>
> >>
> >
>
> --
> You received this message because you are subscribed to the Google Groups
> "Fluent NHibernate" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected]<fluent-nhibernate%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/fluent-nhibernate?hl=en.
>
>
>
>
--
You received this message because you are subscribed to the Google Groups "Fluent NHibernate" 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/fluent-nhibernate?hl=en.

Reply via email to