2011-07-04 1 views
3

J'essaie d'utiliser la nouvelle fonction de mappage de classe loquace que nous avions l'habitude de sortir de Fluent NHibernate. Mais je suis coincé sur la façon d'obtenir les mappages de classe à la configuration. J'ai lu le blog de F Maulo (http://fabiomaulo.blogspot.com/2011/04/me-on-fluent-nhibernate.html) dessus mais je n'arrive pas à le faire fonctionner. Certains d'entre vous ont-ils des informations sur la façon d'ajouter ceci à la configuration NH?Utilisation de mappages de classe loquaces dans NHibernate

Cordialement,

a trouvé la réponse basée sur la réaction

foreach (string mappingAssembly in MappingsAssembly.Split(',')) 
     { 
      if (string.IsNullOrEmpty(mappingAssembly)) continue; 
      Assembly assembly = Assembly.Load(mappingAssembly); 
      types.AddRange(assembly.GetTypes()); 
      // configuration.AddAssembly(assembly); 
     } 
     configuration.DataBaseIntegration(x => GetDatabaseConfig(x)); 

     ModelMapper mapper = new ModelMapper(); 

     mapper.AddMappings(types); 
     var compiledMapping = mapper.CompileMappingForAllExplicitAddedEntities(); 

     configuration.AddMapping(compiledMapping); 

Répondre

1

Vous pouvez essayer quelque chose le long de ces lignes:

ModelMapper mapper = new ModelMapper(); 
// your mappings by code 
Type[] types = new Type[] {}; // your mapped types here 
// compile mappings 
HbmMapping mapping = mapper.CompileMappingFor(types); 
// create configuration 
Configuration cfg = new Configuration(); 
// add mappings to config 
cfg.AddDeserializedMapping(hbm,"documentname"); 

Rappelez-vous simplement que faire les correspondances par code vous donne tout à fait quelques nouvelles possibilités: par exemple: vous pouvez obtenir la liste des types mappés avec Assembly.GetTypes().

1

Si vous utilisez déjà Fluent, le plus simple serait de conserver des fichiers de mapping séparés et de les charger tous au démarrage. J'ai donc une classe d'initialisation qui définit une variable niveau de la classe

private ModelMapper _mapper = new ModelMapper(); 

j'appelle Initialize()

public void Initialize() 
    { 
     Configure = new Configuration(); 
     Configure.SessionFactoryName(System.Configuration.ConfigurationManager.AppSettings["SessionFactoryName"]); 
     Configure.DataBaseIntegration(db => 
             { 
             db.Dialect<MsSql2008Dialect>(); 
             db.Driver<SqlClientDriver>(); 
             db.KeywordsAutoImport = Hbm2DDLKeyWords.AutoQuote; 
             db.IsolationLevel = IsolationLevel.ReadCommitted; 
             db.ConnectionStringName = ConnectionStringName; 
             db.BatchSize = 20; 
             db.Timeout = 10; 
             db.HqlToSqlSubstitutions = "true 1, false 0, yes 'Y', no 'N'"; 
             }); 
     Configure.SessionFactory().GenerateStatistics(); 

     Map(); 
    } 

alors ma méthode est cette

private void Map() 
    { 
     _mapper.AddMappings(MappingAssembly.GetExportedTypes()); 
     Configure.AddDeserializedMapping(_mapper.CompileMappingForAllExplicitlyAddedEntities(), "MyWholeDomain"); 
    } 
Carte()

J'aime transmettre mon nom d'assembly de mappage via mes paramètres appSettings.

Questions connexes