2009-10-21 6 views
2

En ce moment, je change mon projet du style classique de nhibernate fluent de la définition manuelle d'un ClassMap pour chaque entité de domaine, pour que le mappeur automatique génère automatiquement les mappings pour moi. Mais je voudrais continuer à utiliser les classes que j'ai déjà mappées dans le style classique, jusqu'à ce que je puisse modifier les automappings pour les faire correspondre aux anciens mappings classiques.Dans NHibernate Fluent, comment combiner des types automappés avec des types non-automappés?

Le seul problème est que le nhibernate fluide se bloque lorsque le mappeur automatique frappe une classe qui a déjà été cartographiée dans le style classique de nhibernate.

Voici mon AutoPersistenceModel code d'installation:

_autoPersistenceModel = AutoMap.AssemblyOf<DomainEntity>(); 
_autoPersistenceModel.AddMappingsFromAssembly(typeof (PlayerPersistenceMap).Assembly); 

_autoPersistenceModel.Alterations(x => 
        x.Add<AutoMappingAlteration>()) 
       .Setup(s => 
       { 
        s.FindIdentity = type => type.Name == "ID"; 

        s.IsBaseType = type => (type == typeof(DomainEntity)); 
       }) 
       .Conventions 
        .AddFromAssemblyOf<IdentityColumnConvention>() 
        .UseOverridesFromAssemblyOf<PlayerMappingOverride>(); 

Quelqu'un peut-il me aider?

Plus d'info:

J'ai aussi essayé la technique mentionnée sur le wiki couramment-NHibernate here. Hélas, je reçois toujours l'erreur: Duplicate class/entity mapping.

Répondre

2

Le mixed fluent mappings and auto mappings example dans le wiki devrait fonctionner, si ce n'est pas le cas, il y a un bug. En guise de solution de rechange, excluez les types qui ont été mappés manuellement à partir de vos automappings. Vous souhaitez le faire en utilisant la méthode Where, comme le montrent les exemples de wiki, quelque chose comme ceci:

AutoMap.AssemblyOf<DomainEntity>() 
    .Where(type => type != typeof(OneOfYourManuallyMappedClasses)); 

Si vous avez beaucoup d'applications couramment, vous pouvez créer une collection pour maintenir la configuration AutoMapping propre:

var mappedTypes = new[] { typeof(One), typeof(Two) }; 

AutoMap.AssemblyOf<DomainEntity>() 
    .Where(type => !mappedTypes.Contains(type)); 

Encore une fois, cela ne devrait pas être nécessaire, mais si vous êtes certain qu'il ne fonctionne pas avec l'exemple de wiki alors je vous suggère de soulever une question.

+0

J'ai découvert un bogue dans mon code lié à SchemaUpdate, qui aurait pu déclencher le message d'erreur, mais je ne suis pas sûr qu'ils soient liés. Je vais le tester encore aujourd'hui avec le correctif, et faire un commentaire ici si le problème est toujours là. Merci pour votre contribution. –

+0

Hey, je suis retourné et vérifié deux fois, et si je ne fais pas une solution de contournement, alors je reçois toujours l'erreur "duplication de classe/entité mapping" –

Questions connexes