2011-05-19 45 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的答案)。