建立与数据库的连接时不使用NHibernate connection.isolation设置

时间:2013-04-05 05:37:31

标签: .net nhibernate

我创建了一个.net应用程序,它使用NHibernate 2.1.0.4000连接SQL服务器,配置如下。

<nhibernate xmlns="urn:nhibernate-configuration-2.2">
    <session-factory>
      <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
      <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
      <property name="connection.connection_string">Server=(local);database=MYDB;Integrated Security=SSPI;</property>
      <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
      <property name="show_sql">false</property>
      <property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
      <!-- Specifying the default schema improves the query execution plan generated by SQL server -->
      <property name="default_schema">dbo</property>
      <property name="connection.isolation">ReadUncommitted</property>
      <!-- Specifying the 2nd level cache -->
      <property name="cache.provider_class">NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache</property>
      <property name="cache.use_second_level_cache">true</property>
      <property name="cache.use_query_cache" >true</property>
      <mapping assembly="MyAssemply" />
    </session-factory>
  </nhibernate>

在Nhibernate配置中,隔离级别指定为ReadUncommitted。但是在建立与数据库的连接时不使用隔离级别。相反,它将默认隔离级别设为ReadCommitted以继续。 进行一些调查后发现,如果在代码中指定session.BeginTransaction(),则将隔离级别作为配置值。有没有办法将隔离级别的数据库连接为“ReadUncommitted”(或设置中的隔离级别)而不设置session.BeginTransaction()

请分享您的想法。

1 个答案:

答案 0 :(得分:2)

行为是正确的。

启动事务时设置事务隔离级别。这与您在显式交易中完成所有工作的建议一致。