从NHibernate配置部分配置Fluent NHibernate

时间:2011-02-24 18:56:28

标签: nhibernate fluent-nhibernate

我正在尝试在我的解决方案中使用Fluent NHibernate,使用以下NHibernate xml配置部分进行配置

<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
  <session-factory name="mitre">
    <property name="dialect">NHibernate.Dialect.Oracle9iDialect</property>
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="connection.driver_class">NHibernate.Driver.OracleDataClientDriver</property>
    <property name="connection.connection_string">Data Source=YOUR_DB_SERVER;Database=Northwind;User ID=YOUR_USERNAME;Password=YOUR_PASSWORD;</property>
    <property name="connection.isolation">ReadCommitted</property>
    <property name="default_schema">TRATE</property>
    <!-- HBM Mapping Files -->
    <mapping assembly="Markel.Mint.Mitre.Data" />
  </session-factory>
</hibernate-configuration>

在我的代码文件中,实例化ISession:

NH_Cfg.Configuration cfg = new NH_Cfg.Configuration();
cfg.Configure();

Fluently.Configure(cfg).Mappings(m => m.FluentMappings = ????)

我的问题是,如果我已经在NHibernate配置部分中指定了程序集,我是否需要显式设置FluentMappings?如果是这样,那么可以通过编程方式从NHibernate配置中检索这些数据吗?

由于 盎司

2 个答案:

答案 0 :(得分:5)

在hibernate.cfg.xml中的映射程序集中搜索嵌入的* .hbm.xml文件。 NHibernate对Fluent NHibernate引入的流畅映射(例如ClassMap)一无所知。所以你需要:

Fluently.Configure(cfg).Mappings(m => m.FluentMappings.AddFromAssemblyOf<SomeDomainType>();

为了使用你的ClassMap映射配置NHibernate。

答案 1 :(得分:2)

感谢你的快速反应,詹姆斯。

我可以这样做吗?

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
  <session-factory name="mitre">
    <property name="dialect">NHibernate.Dialect.Oracle9iDialect</property>
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="connection.driver_class">NHibernate.Driver.OracleDataClientDriver</property>
    <property name="connection.connection_string">Data Source=YOUR_DB_SERVER;Database=Northwind;User ID=YOUR_USERNAME;Password=YOUR_PASSWORD;</property>
    <property name="connection.isolation">ReadCommitted</property>
    <property name="default_schema">TRATE</property>
    <property name="fluent.nhibernate.fluentmapping">Markel.Mint.Mitre.Core.Domain</property>
  </session-factory>
</hibernate-configuration>

然后我的代码可以引用属性:

NH_Cfg.Configuration cfg = new NH_Cfg.Configuration();  cfg.Configure();           
Fluently.Configure(cfg).Mappings(m => m.FluentMappings.AddFromAssembly(Assembly.Load(cfg.Properties["fluent.nhibernate.fluentmapping"])));