You don't need to call Accept, FNH does that.
Your Accept method is wrong. Where did you find that sample? This behaviour
changed as part of the release, Accept methods are now not required by
default, and you need to explicitly specify them if you want to use them.
You can read about it under conditional applying of
conventions<http://wiki.fluentnhibernate.org/Conventions#Conditional_applying_of_conventions>
.
On Mon, Aug 17, 2009 at 8:19 PM, Jim Tanner <[email protected]> wrote:

>
> Ok i found  the documentation and tried to implement
> IReferenceConvention. Is it what i need for many to one collections ?
> Basically i want :
> if my field is a mapped object and starts with id, make it a many to
> one.
>
> i found two ways to do it.
>
>  public class ManyToOneConventionCorrection
>   : IReferenceConvention
>    {
>        public bool Accept(IManyToOneInstance instance)
>        {
>            return instance.Name.ToLower().StartsWith("id");
>        }
>
>        public void Apply(IManyToOneInstance instance)
>        {
>            if (Accept(instance))
>                instance.Column = instance.Name;
>        }
>    }
>
> void ApplyConventions(AutoPersistanceModel model)
> {
>     model.Conventions.Setup(s =>s.Add<ManyToOneConventionCorrection>
> ())
> }
>
> It does not work, i never reach any of the code through debugger.
> Works well for properties IPropertyConvention and class
> IClassConvention, but not for IReference, at least not if reference is
> a many to one.
>
>
> i found this other way to define the convention which works well
> 2 .
> void ApplyConventions(AutoPersistanceModel model)
> {
> var manyToOneConventionCorrection = ConventionBuilder.Reference.When(
>              x => x.Expect(y => y.Name.StartsWith("id")),
>              z => z.Column(z.Name));
>
> autoPersistanceModel.Conventions.Setup(s =>s.Add
> (manyToOneConventionCorrection))
> }
>
>
> On 17 août, 19:28, James Gregory <[email protected]> wrote:
> > By convention your property should be CarType, not IdCarType. If your
> column
> > is IdCarType then you need to specify that manually by using Column, if
> this
> > is a domain-wide convention then you should look into defining an actual
> > convention <http://wiki.fluentnhibernate.org/Conventions>.
> >
> > On Mon, Aug 17, 2009 at 5:01 PM, Jim Tanner <[email protected]> wrote:
> >
> > > I have the following class
> >
> > > public Car
> > > {
> > >  int Id {get;set}
> > > String Color {get;set}
> > >  CarType IdCarType {get;set}
> > > }
> >
> > > I am using autoconfiguration and i get the following mapping
> >
> > >    <id name="Id" type="Int">
> > >      <column name="Id" />
> > >      <generator class="identity" />
> > >    </id>
> > >    <property name="Color" type="String">
> > >      <column name="Color" />
> >
> > >    <many-to-one name="IdCarType">
> > >      <column name="IdCarType_id" />
> > >    </many-to-one>
> >
> > > The problem being 'IdCarType_id', my column is actually IdCarType.
> >
>

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