If your column names are sometimes reserved words, you can wrap them in
backticks. So you could remove the explicit column name from the Map call
and modify your convention to do: "`" +
target.Property.Name.ToUpperCaseUnderscore()
+ "`"
That will make NHibernate escape the column names in any queries.

On Sat, Mar 14, 2009 at 4:42 PM, JohnRudolfLewis <johnrle...@gmail.com>wrote:

>
> I got it working, but the code does not feel right. The code in my
> Apply method is what really bugs me.
>
> In my class map, I now need to do the following......
>
>     Map(x => x.Column, "COLUMN_NAME")
>
> And in my IPropertyConvention I need to do this....
>
>       public void Apply(IProperty target)
>        {
>             if (target.ColumnNames.List().Count == 0)
>             {
>                target.ColumnNames.Add
> (target.Property.Name.ToUpperCaseUnderscore());
>            }
>        }
>
>
> On Mar 14, 9:29 am, JohnRudolfLewis <johnrle...@gmail.com> wrote:
> > I forget the number, but it was from yesterday. I will try to rewrite
> > considering what you just posted. (our posts crossed)
> >
> > On Mar 14, 9:16 am, James Gregory <jagregory....@gmail.com> wrote:
> >
> >
> >
> > > How recently did you update?
> > > Properties can have multiple columns and it was ambiguous whether you
> were
> > > setting the name or adding an extra one, I've since updated the code to
> make
> > > it a bit clearer. If I remember correctly your Apply should contain:
> >
> > > target.ColumnNames.Clear(); // make sure there are no other columns
> > > specified first
> > > target.ColumnNames.Add(target.Property.Name.ToUpperCaseUnderscore());
> >
> > > On Sat, Mar 14, 2009 at 4:07 PM, JohnRudolfLewis <johnrle...@gmail.com
> >wrote:
> >
> > > > I am playing with the latest conventions code and loving it so far.
> > > > But when I tried to implement a convention for my column names to
> > > > match what my Oracle DBA tells me I must do, I run into trouble.
> >
> > > > When I declare the following:
> >
> > > >    public class ColumnNameConvention : IPropertyConvention
> > > >    {
> > > >        public bool Accept(IProperty target)
> > > >        {
> > > >            return true;
> > > >        }
> >
> > > >        public void Apply(IProperty target)
> > > >        {
> > > >            // ToUpperCaseUnderscore is an extension I declare
> > > > elsewhere, it returns a string
> > > >            target.ColumnName
> > > > (target.Property.Name.ToUpperCaseUnderscore());
> > > >        }
> > > >    }
> >
> > > > I get the following errors:
> >
> > > >     FluentNHibernate.Cfg.FluentConfigurationException : An invalid or
> > > > incomplete configuration was used while creating a SessionFactory.
> > > > Check PotentialReasons collection, and InnerException for more
> detail.
> >
> > > >     NHibernate.MappingException : property mapping has wrong number
> > > > of columns: MyMappingTest.DomainModel.User.PersonType type: String-
> Hide quoted text -
> >
> > > - Show quoted text -- Hide quoted text -
> >
> > - Show quoted text -
> >
>

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

Reply via email to