Troy,

I think it's very usefull to combine the automapping with custom
mapping to get the best of both worlds. The approach that I'm testing
out is defining your custom mapping as a specialization of an
automap:

eg.
My entity customer:
public class Customer
    {
        public Guid Id {get;set;}
        public string PartyNumber { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }

My customized Customer AutoMap (which I put in my repository
assembly):
public class CustomerMap : AutoMap<Customer>
    {
        public CustomerMap()
        {
            Map(c => c.PartyNumber).TheColumnNameIs("party");
        }
    }
(AutoMap<T> inherits from ClassMap<T>)

Load the 'customized AutoMap<T>'s first using
model.MergeWithAutoMapsFromAssemblyOf<CustomerMap>(); //model is
AutoPersistenceModel

Maybe this can be of interest to you.

Bart.

On 8 jan, 10:03, "Andrew Stewart" <andrew.stew...@i-nnovate.net>
wrote:
> Hi Troy
> Yeah, to get the benefit you really have to set a bunch of constraints and
> try to stay inside them it's usually best on a greenfield to be honest.
>
> Andy
>
>
>
>
>
> On Thu, Jan 8, 2009 at 4:29 AM, Troy Goode <troygo...@gmail.com> wrote:
> > Thanks Andy,
>
> > Evidently I had a version of the source from before IsBaseType was
> > introduced. Once I refreshed and rebuilt the source I was able to get
> > everything working. In the end, though, I decided to go back to using
> > ClassMap<T> because I was having to create so many overrides for things like
> > WithLengthOf(x) and CanNotBeNull() that it wasn't worth it for my particular
> > project. It was a fun spike though!
>
> > Troy
>
> > On Tue, Jan 6, 2009 at 2:39 PM, Andrew Stewart <
> > andrew.stew...@i-nnovate.net> wrote:
>
> >> Hi Troy
> >> Here we go straight from the tests :o), always a good place to put things
> >> you can't remember.
>
> >>          var autoMapper = AutoPersistenceModel
> >>                     .MapEntitiesFromAssemblyOf<ExampleClass>()
> >>                     .Where(t => t.Namespace ==
> >> "FluentNHibernate.AutoMap.TestFixtures.SuperTypes")
> >>                     .WithConvention(c =>
> >>                                         {
> >>                                             c.IsBaseType = b => b ==
> >> typeof(BaseEntity);
> >>                                         });
>
> >> That should do it for you.
>
> >> Andy
>
> >> On Tue, Jan 6, 2009 at 4:57 PM, Troy Goode <troygo...@gmail.com> wrote:
>
> >>> Thanks Andrew, that makes sense, but unfortunately I'm still not
> >>> getting it to work. I added a convention for GetPrimaryKeyName, but
> >>> wasn't able to determine what convention to use to change the
> >>> baseobject to BaseEntity from object. When you have some time, any
> >>> help would be appreciated.
>
> >>> Troy
>
> >>> On Jan 6, 11:44 am, "Andrew Stewart" <andrew.stew...@i-nnovate.net>
> >>> wrote:
> >>> > Hi Troy
> >>> > I'm away from the code right now but the answers your are looking for
> >>> are
> >>> > under the WithConventions method.
>
> >>> > From there you can set your baseobject to be BaseEntity rather than
> >>> object
> >>> > and set GetPrimaryKeyName to be Id.
>
> >>> > Hope that helps if not i'll look it up when I'm back at a machine.
>
> >>> > Andy
>
> >>> > On Tue, Jan 6, 2009 at 4:35 PM, Troy Goode <troygo...@gmail.com>
> >>> wrote:
>
> >>> > > Alright, I'm stumped. I have everything working fine with normal FNH,
> >>> > > but once I tried to spike automapping I ran into an issue. In my
> >>> > > project I have a base class for all of my entities like so:
>
> >>> > > public abstract class BaseEntity
> >>> > > {
> >>> > >        public virtual int? Id { get; set; }
> >>> > >        public virtual DateTime? DateCreated { get; set; }
> >>> > >        public virtual DateTime? DateLastModified { get; set; }
> >>> > >        public virtual DateTime? DateDeleted { get; set; }
> >>> > > }
>
> >>> > > So an example of one of my entities would be:
>
> >>> > > public class Foo : BaseEntity
> >>> > > {
> >>> > >        public virtual string Name { get; set; }
> >>> > > }
>
> >>> > > Finally, my autopersit setup looks like so:
>
> >>> > > var persistanceModel = AutoPersistenceModel
> >>> > >    .MapEntitiesFromAssemblyOf<Foo>()
> >>> > >    .Where( t=> t.Namespace == "MyNamespace" && t.Name !=
> >>> > > "BaseEntity" )
> >>> > >    .ForTypesThatDeriveFrom<BaseEntity>( t=>
> >>> > >                                         {
> >>> > >                                                t.Id( e => e.Id, "Id"
> >>> );
> >>> > >                                                t.Map( e=>
> >>> e.DateCreated );
> >>> > >                                                t.Map( e=>
> >>> > > e.DateLastModified );
> >>> > >                                                t.Map( e=>
> >>> e.DateDeleted );
> >>> > >                                         } );
>
> >>> > > The problem I've encountered is that when NH goes to generate its
> >>> > > query, it comes up with something like so:
>
> >>> > > SELECT
> >>> > >        this_.BaseEntityId as Id0_0_,
> >>> > >        this_1_.DateLastModified as DateLast2_0_0_,
> >>> > >        this_1_.DateDeleted as DateDele3_0_0_,
> >>> > >        this_1_.DateCreated as DateCrea4_0_0_,
> >>> > >        this_.Name as Name0_0_
> >>> > > FROM
> >>> > >        Foo this_
> >>> > >        inner join [BaseEntity] this_1_
> >>> > >                on this_.BaseEntityId=this_1_.Id
>
> >>> > > This will not work as my table structure is simply:
>
> >>> > > Foo
> >>> > >  - Id
> >>> > >  - Name
> >>> > >  - DateCreated
> >>> > >  - DateLastModified
> >>> > >  - DateDeleted
>
> >>> > > Like I said, I have everything working with ClassMap, it is only when
> >>> > > I try to use AutoPersistence that the issue arises... so two
> >>> > > questions:
> >>> > > 1) How do I configure things so that BaseEntity is not assumed to be
> >>> > > another table?
> >>> > > 2) How do I configure things so that the Id property maps to the "Id"
> >>> > > column, rather than (the non-existent) "BaseEntityId" column?
>
> >>> > > Thanks!
>
> >>> > --
> >>> > =================
> >>> > I-nnovate Software - Bespoke Software Development, uk wirral.
> >>>http://www.i-nnovate.net
>
> >> --
> >> =================
> >> I-nnovate Software - Bespoke Software Development, uk wirral.
> >>http://www.i-nnovate.net
>
> --
> =================
> I-nnovate Software - Bespoke Software Development, uk 
> wirral.http://www.i-nnovate.net- Tekst uit oorspronkelijk bericht niet 
> weergeven -
>
> - Tekst uit oorspronkelijk bericht weergeven -
--~--~---------~--~----~------------~-------~--~----~
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