Its not ment to check the order in which conventions have been applied, but since overrides, I believe, are applied before the convention (maybe i'm wrong) then this should work.
Martin Hornagold, The fact that Email fields have a specific string length is a convention in its own right and should be stated as such. Completly agree with that. On Apr 17, 9:59 am, "Martin Hornagold" <martin.hornag...@marstangroup.com> wrote: > Berryl, > > Currently I have very few mapping overrides and they only really deal with > edge cases such as sets of components that currently are not handled by > automapping. > Almost everything is dealt with through the convention interfaces. > Although you have more classes it is so much easier to work with when you > have clearly defined conventions with descriptive names. > > -----Original Message----- > From: fluent-nhibernate@googlegroups.com > [mailto:fluent-nhibern...@googlegroups.com] On Behalf Of Berryl Hesh > Sent: 16 April 2009 19:40 > To: Fluent NHibernate > Subject: [fluent-nhib] Re: conventions & overrides > > I hear you. Maintenance is my goal too so even though it seems more > maintainable to me in one spot for now, I appreciate the benefit of > your experience here. > > Are you finding your mapping override classes are doing less and less > as you use convention interfaces more? Anything at all? > > On Apr 16, 9:40 am, "Martin Hornagold" > <martin.hornag...@marstangroup.com> wrote: > > The trouble with burying logic like that in the apply methods is that it > > makes it less maintainable. > > In the case of your Email string length this is clearly a new different > > convention. > > By having separate convention classes it makes that statement explicitly > > and easier to see what is going on. > > > -----Original Message----- > > From: fluent-nhibernate@googlegroups.com > > [mailto:fluent-nhibern...@googlegroups.com] On Behalf Of Berryl Hesh > > Sent: 16 April 2009 17:10 > > To: Fluent NHibernate > > Subject: [fluent-nhib] Re: conventions & overrides > > > I think I like it better having one convention for like items (ie, > > string lengths), like this: > > > public void Apply(IProperty property) { > > if (property.Property.Name == "Email") { > > property.WithLengthOf(30); > > return; > > } > > property.WithLengthOf(50); > > } > > > No point in repeating this in the useless override. I'm sure there is > > a great reason why FNH does it this way but it seems more intuitive to > > me right now to have overrides go last. > > > I guess the rule is that an override only makes sense where it is > > touching on something totally you can't figure out how to address by > > convention? > > > On Apr 16, 8:44 am, "Martin Hornagold" > > <martin.hornag...@marstangroup.com> wrote: > > > Berryl, > > > > The best way I have found is to create a separate property convention > > > for the edge case. > > > In this property convention create a static Accepts method to allow > > > cleaner calling of it from the default convention: > > > > public class EmailStringLengthConvention : IPropertyConvention > > > { > > > public bool Accept(IProperty property) > > > { > > > return property.Name.Contains("Email"); > > > } > > > > public bool Apply(IProperty property) > > > { > > > property.WithLengthOf(30); > > > } > > > > public static Accept(IProperty property) > > > { > > > return (new > > > EmailStringLengthConvention).Accept(property); > > > } > > > > } > > > > Then the accept of your Default convention would accept anything not > > > accepted by the email convention > > > > public class DefaultStringLengthConvention: IPropertyConvention > > > { > > > public bool Accept(IProperty property) > > > { > > > return !EmailStringLengthConvention.Accept(property); > > > } > > > > public bool Apply(IProperty property) > > > { > > > property.WithLengthOf(50); > > > } > > > > } > > > -----Original Message----- > > > From: fluent-nhibernate@googlegroups.com > > > > [mailto:fluent-nhibern...@googlegroups.com] On Behalf Of Berryl Hesh > > > Sent: 16 April 2009 16:22 > > > To: Fluent NHibernate > > > Subject: [fluent-nhib] conventions & overrides > > > > Please forgive me if the answer to this should be obvious from the > > > docs. > > > > I'm using AutoMapping w/ conventions, and I have an override class. > > > The case I'm asking about happens to be re: StringLength but I'm > > > hoping the idea should be applicable to any convention. > > > > Convention class > > > ------------------------ > > > public class DefaultStringLengthConvention: IPropertyConvention > > > { > > > public bool Accept(IProperty property) { return true; } > > > > public void Apply(IProperty property) { property.WithLengthOf > > > (50); } > > > } > > > > Override > > > ----------------- > > > public void Override(AutoMap<User> mapping) { > > > mapping.Map(x => x.Email).WithLengthOf(30); > > > } > > > > FNH looks at the override class before the convention, which explains > > > why the generated ddl for Email.StringLength winds up being 50 instead > > > of 30; so I'm guessing I need some logic in Accept() to deal with > > > this. > > > > Is that the case? > > > > Thx! > > > Berryl --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Fluent NHibernate" group. To post to this group, send email to fluent-nhibernate@googlegroups.com To unsubscribe from this group, send email to fluent-nhibernate+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/fluent-nhibernate?hl=en -~----------~----~----~----~------~----~------~--~---