Billy,

 

I agree with James.

The beauty of the new conventions system is that you can selectively
apply conventions to classes.

I notice from your comment about class exclusions and your comments in
the PrimaryKeyConvention class in S#arp that you seem to be shying away
from this.

 

I have been battling with how to apply conventions/overrides within my
project and am now leaning towards James' approach of targeted
conventions with prescriptive class names .

 

So in S#arp's Northwind sample we should have:

 

IdentityIdConvention

AssignedStringIdConvention

 

Rather than just PrimaryKeyConvention

 

We should have Pluralized and Singular table name conventions.

 

There should also Lazy and NonLazy class conventions which would again
reduce the need for overrides and are more maintainable.

 

Just my 2 pennies

 

Martin

 

From: fluent-nhibernate@googlegroups.com
[mailto:fluent-nhibern...@googlegroups.com] On Behalf Of James Gregory
Sent: 25 March 2009 10:02
To: fluent-nhibernate@googlegroups.com
Subject: [fluent-nhib] Re: .WithTable in IAutoMappingOverride doesn't
override IClassConvention

 

Ah, damn. I can't re-order them. The conventions can't be applied before
the overrides because the overrides may alter the underlying classmap,
which could result in some conventions not being applied when they
should be.

 

I'd go with my previous suggestion of doing this exclusively with
conventions. You've got a few options: you could have your
TableNameConvention and a RegionTableNameConvention, or a
PluralizedTableNameConvention and a SingularTableNameConvention, or
perhaps a Plural attribute that you decorate specific entities with.

 

Let me know what you think of this.

On Wed, Mar 25, 2009 at 9:56 AM, James Gregory <jagregory....@gmail.com>
wrote:

Just looked into this, it seems overrides are being applied before
conventions. So the changes get overwritten by the conventions... The
thread you linked to is a bit of a bigger issue, but for this one I
should just be able to reorder when the overrides get applied.

 

An alternative is to not use overrides at all for this situation, as
you're not actually doing anything with the automappings. You could just
write another convention that's RegionTableNameConvention.

 

Still, I'll fix this either way.

 

On Tue, Mar 24, 2009 at 8:29 PM, James Gregory <jagregory....@gmail.com>
wrote:

Yep, something smelly is going on here. I'll investigate.

 

On Tue, Mar 24, 2009 at 8:13 PM, Billy <wmccaffe...@gmail.com> wrote:


Looks like this is related to the issue described at
http://groups.google.com/group/fluent-nhibernate/browse_thread/thread/b8
66ce932b2a4f89

Incidentally, if I modify the class convention to ignore the Region
class, then the override works just fine; e.g.,


public class TableNameConvention : IClassConvention
{
   public bool Accept(IClassMap classMap) {

       return classMap.EntityType != typeof(Region);

   }

   public void Apply(IClassMap classMap) {
       classMap.WithTable(Inflector.Net.Inflector.Pluralize
(classMap.EntityType.Name));
   }
}

But preferably, I don't want to have to put class exclusions within
the convention classes, I'd rather have the overrides always take
precedence.

Billy



On Mar 24, 2:07 pm, Billy <wmccaffe...@gmail.com> wrote:
> Hi James,
>
> I'm updating S#arp Architecture's example project to the last and have
> made great progress.  In fact, the thing remaining is a problem I'm
> having with an override not "taking."
>
> I have the following class convention:
>
> public class TableNameConvention : IClassConvention
> {
>     public bool Accept(IClassMap classMap) {
>         return true;
>     }
>
>     public void Apply(IClassMap classMap) {
>         classMap.WithTable(Inflector.Net.Inflector.Pluralize
> (classMap.EntityType.Name));
>     }
>
> }
>
> I then have an override for a Region class as follows:
>
> public class RegionMap : IAutoMappingOverride<Region>
> {
>     public void Override(AutoMap<Region> mapping) {
>         mapping.WithTable("Region");
>         ...
>     }
>
> }
>
> The .WithTable in the override is not getting applied, although the
> other settings within the override are being applied just fine.  When
> I do a select for any region objects, the SQL is trying to query a
> table named Regions (which is compliant with the convention, but not
> with the override).
>
> Ideas?
>
> Thanks!
> Billy McCafferty

 

 

 




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