Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从SessionFactory获取ConnectionProvider_C#_Database_Nhibernate_Connection - Fatal编程技术网

C# 从SessionFactory获取ConnectionProvider

C# 从SessionFactory获取ConnectionProvider,c#,database,nhibernate,connection,C#,Database,Nhibernate,Connection,要执行一些自定义(黑盒)SQL操作,我需要有一个IDBConnection实例,它指向我们已经通过NHibernate定期访问的数据库 我不想部署单独的数据库配置(一个本地配置,一个nhibernate),而是希望nhibernate允许我直接访问已配置的数据库 我看到ISession接口有一个连接属性,我可以创建一个虚拟会话,但我更愿意使用一个完全独立于任何创建的会话的连接 因此,我想知道是否有机会获得会话工厂用于为创建的会话提供连接的IConnectionProvider实例?我认为打开会话

要执行一些自定义(黑盒)SQL操作,我需要有一个IDBConnection实例,它指向我们已经通过NHibernate定期访问的数据库

我不想部署单独的数据库配置(一个本地配置,一个nhibernate),而是希望nhibernate允许我直接访问已配置的数据库

我看到ISession接口有一个连接属性,我可以创建一个虚拟会话,但我更愿意使用一个完全独立于任何创建的会话的连接


因此,我想知道是否有机会获得会话工厂用于为创建的会话提供连接的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,但该代码给了我一个相同类型的新(未配置)实例,它不会给我配置的提供程序实例。。。