> > What you may be looking to do here is use two one-to-many associations on > both sides
Erm, that should read "two many-to-one associations" (.References() in FNH), apologies for the confusion. On Thu, Jul 16, 2009 at 3:55 PM, Hudson Akridge <[email protected]>wrote: > It's been a while since I've done one-to-one's, but I'll give this a try :) > I believe you need to have a "constrained" setting for one of the sides to > start with, this denotes which side and how the one-to-one saves. > > I'm actually not entirely sure that this mapping is legal for one-to-one, > because as far as I'm aware, and have implemented in the past, the primary > key's of both entities must be identical, and so you map the "child" id > generation to be Foreign, and set it to the property of the one-to-one > association. But with a subclass, by definition, they can't be, since they > exist in the same table structure, and will collide ID's. > > What you may be looking to do here is use two one-to-many associations on > both sides. > > I don't know what the design is you're shooting for, but one other red flag > for me is two subclasses having essentially a single entity reference to the > other. Typically this means those two classes can be merged, and you might > just want to persist an enum that changes what type of Activity a user is > dealing with. > > On Thu, Jul 16, 2009 at 3:30 PM, Berryl Hesh <[email protected]> wrote: > >> >> Hello: >> >> I was expecting the HasOne relationship that is part of my inheritance >> mapping to not let me save a ProjectActivity unless it's Project >> attribute exists in the db (Project is a mapped Entity also). Is there >> an option I can use to enforce this? >> >> Thanks! >> B >> >> Domain inheritance hierarchy >> ------------------------------------------------- >> public abstract class Activity : Entity { ... } >> >> public class ProjectActivity : Activity { >> public virtual Project Project { get; private set; } >> } >> >> public class AccountActivity : Activity { >> public virtual Account Account{ get; private set; } >> } >> >> Mapping >> ----------------------- >> public class ActivityMap : IAutoMappingOverride<Activity> >> { >> public void Override(AutoMap<Activity> mapping) >> { >> .......... >> >> mapping.DiscriminateSubClassesOnColumn("ActivityType") >> .SubClass<ProjectActivity>("P", >> x => x.HasOne(y => y.Project) >> .Cascade.None() >> .FetchType.Join()) >> >> .SubClass<AccountActivity>("A", >> x => x.HasOne(y => y.Account).Cascade.SaveUpdate >> ().FetchType.Join()) >> } >> } >> >> >> > > > -- > - Hudson > http://www.bestguesstheory.com > http://twitter.com/HudsonAkridge > -- - Hudson http://www.bestguesstheory.com http://twitter.com/HudsonAkridge --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
