2011-05-19 72 views
3

我偶然發現了以下問題:我想從配置文件配置DB,但映射流利(!喜歡)的配置代碼如下所示:從文件混合DB配置與功能NHibernate映射

var cfg = new Configuration(); 
cfg.Configure(); 
var fluentCfg = Fluently.Configure(cfg) 
         .Mappings(
          m => m 
           .FluentMapping 
           .AddFromAssembly(Assembly.GetExecutingAssembly)); 

然而配置文件有一個屬性:

<property name="proxyfactory.factory_class"> 
    NHibernate.ByteCode.LinFu.ProxyFactoryFactory, 
    NHibernate.ByteCode.LinFu 
</property> 

和之後的cfg.Configure();所有看起來不錯的配置指向LinFu字節碼提供者,但在第三行後我看到配置更改爲使用Castle。我看着在流利的代碼,我可能是錯的,但它看起來像他們在PersistenceConfiguration的構造覆蓋在PersistenceConfiguration.cs(50行)這個屬性:

values[ProxyFactoryFactoryClassKey] = DefaultProxyFactoryFactoryClassName; 

不流利的需要城堡?或者可能是我做錯了什麼,或者這只是一個錯誤?

謝謝。

回答

0

我不知道這是你在找什麼,但它可能會幫助你。您可以在代碼中公開配置並進行所需的任何更改。

var cfg = Fluently.Configure() 
       .Database(MsSqlConfiguration.MsSql2008.ConnectionString(c => c.FromConnectionStringWithKey("ConnectionStringName")).ShowSql()) 
       .Mappings(m => 
       { 
        m.FluentMappings.AddFromAssemblyOf<MapMarker>(); 
        m.FluentMappings.Conventions.AddFromAssemblyOf<ConventionMarker>(); 
       }) 
       .ExposeConfiguration(x => x.SetProperty("proxyfactory.factory_class", "NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu")); 
+0

當然,但想法是從配置文件中配置數據庫(這樣我可以在部署過程中更改conn.strings,db-s等),並將映射保留爲流暢(有一個很好的強類型,編譯時可驗證的映射)。 – Val 2011-05-19 15:56:15

0

有一個ProxyFactoryFactory方法鏈接Configure

Fluently.Configure() 
    .ProxyFactoryFactory(name); 

如果你不上1.2,我相信這是Database號召下(見REXM的答案)。