所有
在Nhibernate中,我看到很多代码写成:
using(ISession sess = factory.OpenSession()) {
using(ITransaction trans = sess.BeginTransaction()) {
// query, or save
trans.Commit();
}}
启动查询甚至单个实体更新的事务总是困惑我为什么?然后在阅读后我了解到,如果你遵循这种模式,你将获得2个好处:
足够公平。 我的问题是关于Castle ActiveRecord和连接池。
我在ASP.NET应用程序中使用Active Record,常见的模式是为整个请求创建会话。
我的问题是:
1。 我应该使用SessionScope或TransactionScope(并使用开始/结束事务来获取/释放我的连接),以便实现有效的连接池,即。我想在持久化逻辑期间保持数据库连接(ADO.net连接对象),而不是请求的整个生命周期(使用上面提到的nhibernate事务实现的连接语义)?
2。 SessionScope超出范围时是否会刷新(即在其Dispose方法中)?
LK(已回答):是的,除非范围是只读的。
3。 TransactionScope超出范围时是否会回滚(即在其Dispose方法中)?
LK(已回答):取决于onDispose操作,但默认情况下会提交。
4。 官方城堡活动记录文件在哪里, - 我看到各个网站上的点点滴滴和链接断开的各个网站。是否有像nhibernate甚至是书籍的官方PDF文档?
答案 0 :(得分:1)
您可以使用SessionScope。它将为您处理常见的事务语义。当您需要对事务进行更细粒度的控制时,可以使用TransactionScope。您甚至可以在SessionScope中打开TransactionScope来处理单个会话中的多个事务。
官方文件在这里:
http://docs.castleproject.org/Active%20Record.MainPage.ashx
这不是很好
旧文件在这里:
http://old.castleproject.org/activerecord/documentation/trunk/index.html
旧的东西对某些主题更好。