Hi,
You seem to be correct in your analysis. The reason this is happening is
because it was never intended that people would subclass AutoMap<T>;
alterations to classes are supposed to be done in the
ForTypesThatDeriveFrom<T> call on the automapper, rather than in a subclass.

I realise this is probably quite annoying, but I'm not willing to endorse
this style of automapping until I've done some investigation into it's
implications. For the time being, I'd recommend either altering your code to
use the recommended ForTypesThatDeriveFrom call, or altering the code
yourself.

I will make a note to review this style to see if it's something we should
officially support.

James

On Tue, Feb 3, 2009 at 4:25 PM, Jimit <[email protected]> wrote:

>
> Hi,
> Sorry if this comes as a duplicate post. I think google might have
> eaten my first so here it is again.
> First off, mad props to all of you involved in the FNH - it rocks!
> That said, I've come across what seems to be a bug in the method
> FindMapping<T> of the AutoPersistenceModel class. Here's a sample
> stack trace:
>
> TestCase 'Can_Write_XML_Mapping_Metadata_To_Folder'
> failed: System.Reflection.TargetInvocationException : Exception has
> been thrown by the target of an invocation.
>  ----> System.IndexOutOfRangeException : Index was outside the bounds
> of the array.
>        at System.RuntimeMethodHandle._InvokeMethodFast(Object target,
> Object
> [] arguments, SignatureStruct& sig, MethodAttributes methodAttributes,
> RuntimeTypeHandle typeOwner)
>        at System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object
> [] arguments, Signature sig, MethodAttributes methodAttributes,
> RuntimeTypeHandle typeOwner)
>        at System.Reflection.RuntimeMethodInfo.Invoke(Object obj,
> BindingFlags invokeAttr, Binder binder, Object[] parameters,
> CultureInfo culture, Boolean skipVisibilityChecks)
>        at System.Reflection.RuntimeMethodInfo.Invoke(Object obj,
> BindingFlags invokeAttr, Binder binder, Object[] parameters,
> CultureInfo culture)
>        at System.Reflection.MethodBase.Invoke(Object obj, Object[]
> parameters)
>        at
>
> FluentNHibernate.InvocationHelper.InvokeGenericMethodWithDynamicTypeArguments
> [T](T target, Expression`1 expression, Object[] methodArguments, Type
> [] typeArguments)
>        at FluentNHibernate.AutoMap.AutoPersistenceModel.FindMapping(Type
> type)
>        at FluentNHibernate.AutoMap.AutoPersistenceModel.CompileMappings()
>        C:\Projects\Dev\Source\Core\Tests\Unit Tests
> \Core.Infrastructure.Data.NHibernate.Tests\MappingTests.cs(47,0): at
>
> Core.Infrastructure.Data.NHibernate.Tests.MappingTests.Can_Write_XML_Mapping_Metadata_To_Folder
> ()
>        --IndexOutOfRangeException
>        at
> FluentNHibernate.AutoMap.AutoPersistenceModel.<FindMapping>b__7[T]
> (IMapping t)
>        at System.Collections.Generic.List`1.Find(Predicate`1 match)
>        at FluentNHibernate.AutoMap.AutoPersistenceModel.FindMapping[T]()
>
> The test above simply instantiates a new AutoPersistenceModel, calls
> MergeWithMappingsFromAssembly<T>() to add some custom mappings
> (classes inheriting from Automap<T>), calls CompileMappings() and
> attempts to write them to a folder using WriteMappingsTo().
>
> I believe the culprit is this line in FindMapping<T>:
>
>            // standard AutoMap<T> not found for the type, so looking
> for one for it's base type.
>            return (IClassMap)_mappings.Find(t => t.GetType
> ().GetGenericArguments()[0] == typeof(T).BaseType);
> Because _mappings contains instances of classes that are derivatives
> of AutoMap<T> and aren't actually generic types, the array returned
> from Type.GetGenericArguments() contains no elements and thus you get
> the IndexOutOfRangeException.
>
> I think the solution is to modify the predicate to allow for none
> generic types by casting to Automap<T> first.
>
>
> >
>

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