以上真的。
一个ISessionFactory.OpenSession()
可以提供一个IDbConnection
。
另一个选项是实现一个
请注意,当向OpenSession()
提供IDbConnection
时,您将无法使用第二级缓存。
请阅读https://forum.hibernate.org/viewtopic.php?f=25&t=959178。
... "This is not a bug. If you are managing your own connections, NHibernate disables the use of second-level cache for the session to be safe."...
嗯,这可能有些棘手,我认为不应该这样做,但这是个想法:
var cfg = new Configuration(); // Get a new NHibernate Configuration
cfg.SetProperty("connection.connection_string", yourConnectionString); // Alter the property
cfg.Configure(); // Configure with this configuration
var sf = cfg.BuildSessionFactory(); // Get a new ISessionFactory
我不知道这是否是最好的方法,但可能起作用。您也可以有2个配置XML文件,并执行以下操作:
var cfg = new Configuration("hibernate1.cfg.xml"); // OR
var cfg = new Configuration("hibernate2.cfg.xml");
针对评论,您可以初始化并准备好多个会话工厂,但这并不算是“更改连接字符串”。然后选择您需要的那个。昂贵的部分是创建 Configuration 对象并调用 Configure()。
还有 NHibernate Burrow 库,可以同时管理多个会话,并根据实体选择正确的会话。
var session = new BurrowFramework().GetSession(); // default session
var session = new BurrowFramework().GetSession(typeof(Entity)); // session that manages Entity class
SessionFactory是设置连接、方言等的所在,因此如果您想更改连接字符串,您需要重新配置。但是,是的,您的评论是正确的。设置会话工厂是最昂贵的操作之一,因此您只希望在需要时执行它,而从不进行任何更多操作。
在nHibernate Burrow中有一些真正的伟大会话概念。如果您查看他们如何管理会话,您可能会发现一些创意想法,以管理跨多个数据库的多个会话。
我有一个建议,与@Marc的原则相同:您可以在提供者中封装动态连接。请参阅关于动态连接提供程序的nhibernate.info维基百科。您可以轻松地构建一个提供者,在其中传递您需要的信息,以便建立指向所需数据库的会话。
我正在使用nHibernate 2.0在100多个数据库上(所有数据库具有相同的架构,但物理上分离的数据),因此只要稍加关注就可以完成;-)
- winforms
- combobox
- fogbugz
- java
- date
- internationalization
- asp.net
- iis
- url-rewriting
- urlrewriter
- c#
- enums
- ocaml
- haxe
- algorithm
- string
- viewstate
- .net
- c++
- c
- symbol-table
- mysql
- database
- postgresql
- licensing
- migration
- vb.net
- vb6
- declaration
- vb6-migration
- python
- psycopg2
- backup
- vmware
- virtualization
- gnu-screen
- authentication
- desktop
- excel
- xll
- cultureinfo
- regioninfo
- oracle
- client
- session
- download
- html
- virtual
- constructor
- scenarios
- perl
- full-text-search
- javascript
- ajax
- testing
- oop
- inheritance
- vim
- encapsulation
- information-hiding