James, I am anticpating that we are going to run into quite a few problems like this one, because the fluent interface is designed for specifying values rather than querying them. For example, we have code that sets things using AddAlteration() - those settings won't be applied by the time the Accept() method is called will they? Furthermore some settings are held in different places - in the case of Nullable, it writes to the column properties, while HasAttribute checks the extended properties.
What are your thoughts on how this should be tackled, both short term and long term (semantic model)? Paul Batum On Thu, Mar 26, 2009 at 3:22 AM, Anders <[email protected]> wrote: > > target.HasAttribute("not-null") always returns false both in Accept > and Apply, I created a ugly workaround by setting not-null explicitly. > > I'll try to create a small sample (showing the odd behavior) in a > couple of hours. > > On Mar 25, 4:27 pm, James Gregory <[email protected]> wrote: > > Hmm. Update your Accept method to do this: > > return !target.HasAttribute("not-null"); > > > > That means it'll only apply it to any classes that haven't already had it > > set. > > > > On Wed, Mar 25, 2009 at 3:13 PM, Anders <[email protected]> wrote: > > > > > Thanks for the hint in the right direction, however it seems like the > > > convention is overriding my "manual" overrides. > > > > > public class NotNullPropertyConvention : IPropertyConvention > > > { > > > public bool Accept(IProperty target) > > > { > > > return true; > > > } > > > public void Apply(IProperty target) > > > { > > > target.Not.Nullable(); > > > } > > > } > > > > > .ConventionDiscovery.Add<NotNullPropertyConvention>() > > > > > .ForTypesThatDeriveFrom<Participant>(map => > > > { > > > map.Map(x => x.BarCode).Nullable(); > > > map.Map(x => x.Country).Nullable(); > > > map.Map(x => x.Title).Nullable(); > > > }) > > > > > The Participant-table gets not null on all properties including > > > BarCode, Country and Title. > > > > > This feels odd, or am I doing something strange? > > > > > On Mar 25, 3:52 pm, James Gregory <[email protected]> wrote: > > > > You want a property > > > > convention<http://wiki.fluentnhibernate.org/show/Conventions>to set > > > > everything to null, then you have a few options for how to handle the > > > > not null ones. > > > > something like: > > > > > > public class NullPropertyConvention : IPropertyConvention > > > > { > > > > public bool Accept(IProperty target) > > > > { > > > > return true; > > > > } > > > > > > public void Apply(IProperty target) > > > > { > > > > target.Nullable(); > > > > } > > > > > > } > > > > > > then for the not nulls, you can either override them on the > > > > AutoPersistenceModel< > > >http://wiki.fluentnhibernate.org/show/AutoMappingAlteringEntities> > > > > : > > > > > > .ForTypesThatDeriveFrom<MyEntity>(m => > > > > m.Map(x => x.MyProperty) > > > > .Not.Nullable()); > > > > > > or you can use an automapping > > > > override<http://wiki.fluentnhibernate.org/show/AutoMappingOverrides> > > > > : > > > > > > public class PersonMappingOverride : IAutoMappingOverride<Person> > > > > { > > > > public void Override(AutoMap<Person> mapping) > > > > { > > > > mapping.Map(x => x.MyProperty) > > > > .Not.Nullable(); > > > > } > > > > > > } > > > > On Wed, Mar 25, 2009 at 2:33 PM, Anders <[email protected]> wrote: > > > > > > > Hi, > > > > > > > I want almost all of my properties to be "non-null", and instead > > > > > override some specific properties that can be null. How do I do > this > > > > > using AutoPersistenceModel? > > > > > > > Thanks > > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
