C# 从SessionFactory获取ConnectionProvider
要执行一些自定义(黑盒)SQL操作,我需要有一个IDBConnection实例,它指向我们已经通过NHibernate定期访问的数据库 我不想部署单独的数据库配置(一个本地配置,一个nhibernate),而是希望nhibernate允许我直接访问已配置的数据库 我看到ISession接口有一个连接属性,我可以创建一个虚拟会话,但我更愿意使用一个完全独立于任何创建的会话的连接C# 从SessionFactory获取ConnectionProvider,c#,database,nhibernate,connection,C#,Database,Nhibernate,Connection,要执行一些自定义(黑盒)SQL操作,我需要有一个IDBConnection实例,它指向我们已经通过NHibernate定期访问的数据库 我不想部署单独的数据库配置(一个本地配置,一个nhibernate),而是希望nhibernate允许我直接访问已配置的数据库 我看到ISession接口有一个连接属性,我可以创建一个虚拟会话,但我更愿意使用一个完全独立于任何创建的会话的连接 因此,我想知道是否有机会获得会话工厂用于为创建的会话提供连接的IConnectionProvider实例?我认为打开会话
因此,我想知道是否有机会获得会话工厂用于为创建的会话提供连接的IConnectionProvider实例?我认为打开会话只是为了获得连接是可以的。我唯一能想到的是,如果没有存储在某个地方,会话可能会意外地被GCed 如果需要会话提供程序,则需要访问配置对象:
public IConnectionProvider GetProvider(NHibernate.Cfg.Configuration cfg)
{
var type = Type.GetType(cfg.GetProperty(Environment.ConnectionProvider));
return (IConnectionProvider) Activator.CreateInstance(type);
}
此解决方案依赖于NHibernate的实现细节。它在我使用它的所有实例中都有效,但在升级NHibernate之后可能不是这样 假设您有我们的字段
ISessionFactory\u sessionFactory
,您可以使用以下转换来访问连接提供程序。尽管文档中说接口ISessionFactoryImplementor
用于会话工厂和NHibernate的其他部分之间的通信,但它是公开的
(_sessionFactory as NHibernate.Engine.ISessionFactoryImplementor).ConnectionProvider
Thx,但该代码给了我一个相同类型的新(未配置)实例,它不会给我配置的提供程序实例。。。