I'll try to come up with something. I'm just converting existing code
and don't have too much expertise with FluentNhibernate or even
NHibernate! so I might stuggle.

On Aug 20, 7:44 pm, James Gregory <[email protected]> wrote:
> Richard,
> I've attempted to replicate your problem and failed, can you provide us with
> some more context? The smallest example to recreate the problem would be
> useful.
>
> FYI, this is what I tested with (based on the latest master commit):
>
>     [TestFixture]
>     public class HasManyConventionTests
>     {
>         [Test]
>         public void ShouldBeAbleToSpecifyKeyColumnNameInConvention()
>         {
>             var model =
>                 AutoMap.Source(new StubTypeSource(typeof(Target)))
>                     .Conventions.Add<HasManyConvention>();
>
>             model.CompileMappings();
>
>             model.BuildMappings()
>                 .First()
>                 .Classes.First()
>                 .Collections.First()
>                 .Key.Columns.First().Name.ShouldEqual("xxx");
>
>         }
>
>         private class HasManyConvention : IHasManyConvention
>         {
>             public void Apply(IOneToManyCollectionInstance instance)
>             {
>                 instance.Key.Column("xxx");
>             }
>         }
>     }
>
>     internal class Target
>     {
>         public IList<Child> Children { get; set; }
>     }
>
>     internal class Child
>     { }
>
> On Thu, Aug 20, 2009 at 10:08 AM, Richard Evans
> <[email protected]>wrote:
>
>
>
> > Hi James
>
> > Thanks for your suggestion. I tried this and it didn't work. Code
> > below shows the state of things. It is as though the call to
> > instance.Key.Column("ParentId"); is not having any effect.
>
> > public void Apply(IOneToManyCollectionInstance instance)
> >        {
> >             bool containsGroupId = instance.Key.Columns.Contains
> > ("GroupId");  // true
>
> >            instance.Key.Column("ParentId");
>
> >            bool containsParentId = instance.Key.Columns.Contains
> > ("ParentId");  // false
> >            containsGroupId = instance.Key.Columns.Contains
> > ("GroupId");   // true
> >        }
>
> > I've got a work around in place, see following code (Add("ParentId")
> > that does work.
>
> > model.ForTypesThatDeriveFrom<Group>(map =>
> >                            {
> >                                map.Where("IsDeleted=0");
> >                                map.Table("Group_");
> >                                map.HasMany(x => x.Children)
> >                                    .Cascade.Delete()
> >                                    .Inverse()
> >                                    .Access.CamelCaseField
> > (Prefix.Underscore)
> >                                    .KeyColumns.Add("ParentId");
> >                                map.References(x => x.Parent);
> >                            });
>
> > On Aug 19, 2:05 pm, James Gregory <[email protected]> wrote:
> > > instance.Key.Column("ParentId") should do the trick
> > > On Wed, Aug 19, 2009 at 2:01 PM, Richard Evans <
> > [email protected]>wrote:
>
> > > > Thanks James for your suggestion, I have that working now.
>
> > > > I've just got one last convention that I need to port.  I've got half
> > > > way but am stuck when it comes to the column names. I've tried
> > > > intellisensing and looking at the API but nothing springs to mind.
> > > > Should I be using a different convention for this type of
> > > > functionality?
>
> > > > public class SelfReferencingHasManyConvention : IHasManyConvention
> > > >    {
> > > >        public bool Accept(IOneToManyPart target)
> > > >        {
> > > >            return target.Member.ReflectedType == target.EntityType &&
> > > > target.Member.Name == "Children";
> > > >        }
>
> > > >        public void Apply(IOneToManyPart target)
> > > >        {
> > > >            target.KeyColumnNames.Clear();
> > > >            target.KeyColumnNames.Add("ParentId");
> > > >        }
> > > >    }
>
> > > > public class SelfReferencingHasManyConvention : IHasManyConvention,
> > > > IHasManyConventionAcceptance
> > > >    {
> > > >        public void Accept
> > > > (IAcceptanceCriteria<IOneToManyCollectionInspector> criteria)
> > > >        {
> > > >            criteria.Expect(x => (x.Member.ReflectedType ==
> > > > x.EntityType && x.Member.Name == "Children"));
> > > >        }
>
> > > >        public void Apply(IOneToManyCollectionInstance instance)
> > > >        {
> > > >            instance.
> > > >         }
> > > >    }
>
> > > > On Aug 19, 11:26 am, James Gregory <[email protected]> wrote:
> > > > > I should've caught that in the first place, but your original
> > convention
> > > > > threw me. You'd never have a ClassMap<Enum>, so you'd never have a
> > > > > IClassConvention for one.
>
> > > > > On Wed, Aug 19, 2009 at 11:25 AM, James Gregory <
> > [email protected]
> > > > >wrote:
>
> > > > > > I just had a look at that code, it's using the wrong convention.
> > > > > > IPropertyConvention is what you'll need, and in that case you'd use
> > > > > > CustomType for changing it's type.
>
> > > > > > On Wed, Aug 19, 2009 at 10:41 AM, Richard Evans <
> > > > [email protected]
> > > > > > > wrote:
>
> > > > > >> Okay, just tried this and it doesn't compile, there is no setter
> > for
> > > > > >> EntityType on IClassInstance.
>
> > > > > >> I'll have a dig around and see if there is a different way.
>
> > > > > >> Cheers.
>
> > > > > >> On Aug 18, 11:04 pm, Jim Tanner <[email protected]> wrote:
> > > > > >> > No problem, glad to have benn helpfull.
>
> > > > > >> > On 18 août, 22:57, Richard Evans <[email protected]>
> > wrote:
>
> > > > > >> > > i did try but i never thought to implement the
> > > > > >> > > IClassConventionAcceptance interface. It was obvious that
> > there
> > > > was a
> > > > > >> > > method missing from the interface but I couldn't work out
> > which
> > > > > >> > > interface I needed to implement. It's obvious now.
>
> > > > > >> > > Thanks for the suggestion and code sample, much appreciated.
>
> > > > > >> > > On Aug 18, 4:41 pm, Jim Tanner <[email protected]> wrote:
>
> > > > > >> > > > I had the same problem yesterdayhttp://
> > > > > >> groups.google.com/group/fluent-nhibernate/browse_thread/thread...
>
> > > > > >> > > > Try this
>
> > > > > >> > > > public class
> > EnumerationTypeShouldBeIntegerNotStringConvention
> > > > > >> > > >   : IClassConvention, IConventionAcceptance<IClassInspector>
> > > > > >> > > >     {
> > > > > >> > > >         public void
> > Accept(IAcceptanceCriteria<IClassInspector>
> > > > > >> > > > criteria)
> > > > > >> > > >         {
> > > > > >> > > >             criteria.Expect(x => x.GetType() ==
> > typeof(Enum));
> > > > > >> > > >         }
>
> > > > > >> > > >         void IConvention<IClassInspector,
> > IClassInstance>.Apply
> > > > > >> > > > (IClassInstance instance)
> > > > > >> > > >         {
> > > > > >> > > >             instance.EntityType = typeof(int);
> > > > > >> > > >         }
> > > > > >> > > >     }
>
> > > > > >> > > > Documentation can be found herehttp://
> > > > > >> wiki.fluentnhibernate.org/Conventions
> > > > > >> > > > and herehttp://
> > > > > >> wiki.fluentnhibernate.org/Conventions#Conditional_applying_of_...
>
> > > > > >> > > > On 18 août, 16:29, Richard Evans <[email protected]
>
> > > > wrote:
>
> > > > > >> > > > > We've got a convention that I'd like to port to RC1. Any
> > > > > >> suggestions
> > > > > >> > > > > for the best way to migrate this?
>
> > > > > >> > > > > public class
> > EnumerationTypeShouldBeIntegerNotStringConvention
> > > > :
> > > > > >> > > > > IClassConvention
> > > > > >> > > > >     {
> > > > > >> > > > >         public bool Accept(IClassMap target)
> > > > > >> > > > >         {
> > > > > >> > > > >             return target.GetType() == typeof(Enum);
> > > > > >> > > > >         }
>
> > > > > >> > > > >         public void Apply(IClassMap target)
> > > > > >> > > > >         {
> > > > > >> > > > >             target.SetAttribute("type", "int");
> > > > > >> > > > >         }
>
> > > > > >> > > > > }
--~--~---------~--~----~------------~-------~--~----~
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