2011-07-04 18 views
3

私はFluent NHibernateから抜け出そうとしていた新しいloquaciousクラスマッピング機能を使用しようとしています。しかし、私はどのように設定にクラスのマッピングを取得するには固執しています。私はそれにFマウロのブログ(http://fabiomaulo.blogspot.com/2011/04/me-on-fluent-nhibernate.html)を読んだが、私はそれを動作させるように見えることはできません。これをNH構成に追加する方法についての情報はありますか?NHibernateでのloquaciousクラスマッピングの使用

よろしく、

反応に基づいて答えを見つけることが

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); 

答えて

1

あなたはこれらの線に沿って何かを試すことができます。

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"); 

は、単にコードでマッピングを行うことができ、非常に与えることを覚えておいてくださいいくつかの新しい可能性:例えば、Assembly.GetTypes()を使ってマップされた型のリストを得ることができます。

1

すでにFluentを使用している場合は、マップファイルを別々にしておき、起動時にそれらをすべてロードするのが最も簡単です。だから私は、私は(初期化を呼び出すクラスレベルに変数

private ModelMapper _mapper = new ModelMapper(); 

を定義する初期クラス)

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(); 
    } 

を持って、その後、私の地図()メソッドは、私がしたいと、この

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

です私のappSettingsを通してマッピングアセンブリ名を渡してください。

関連する問題