J'ai une convention UserTypeConvention<MyUserType>
où MyUserType : IUserType
où MyUserType
gère un enum de type MyEnum
. J'ai configuré Courant NHibernate thuslyPourquoi Fluent NHibernate ignore-t-il ma convention?
sessionFactory = Fluently
.Configure()
.Database(MsSqlConfiguration.MsSql2005.ConnectionString(
c => c.Is(connectionString))
)
.Mappings(
m => m
.FluentMappings
.AddFromAssemblyOf<A>()
.Conventions
.AddFromAssemblyOf<A>()
)
.BuildSessionFactory();
où A
est un type dans le même ensemble que UserTypeConvention<MyUserType>
et MyUserType
. Toutefois, Fluent NHibernate n'applique pas MyUserType
aux propriétés de type MyEnum
sur mes objets de domaine. Au lieu de cela, il applique FluentNHibernate.Mapping.GenericEnumMapper<MyEnumType>
à ces propriétés.
Que se passe-t-il?
Votre convention est-elle touchée si vous la déboguez? Est-ce que c'est public? –
@ James Gregory: Ma convention est 'public'. J'ai remplacé 'UserTypeConvention .Accept' pour voir si elle était appelée. Ce que j'ai appris est qu'il est appelé, mais au moment où mon code atteint ce point, Fluent NHibernate a déjà appliqué 'GenericEnumMapper ' à la propriété en question et donc le critère 'x => x.Type == typeof (MyEnum) 'échoue comme' x.Type' est 'FluentNHibernate.Mapping.GenericEnumMapper '. –
jason
@ James Gregory: Voici une petite solution VS 2010 avec un seul test qui échoue réplique le problème: http://j.mp/bu7wQB – jason