nhibernate 连接释放模式:为什么文档推荐使用“after_transaction”?

2024-01-01

hibernate 文档声明如下:

配置参数 hibernate.connection.release_mode 用于指定使用哪种释放模式。可能的值: *auto(默认值)- 相当于当前版本中的 after_transaction。更改此默认行为很少是一个好主意,因为由于此设置的值而导致的失败往往表明用户代码中存在错误和/或无效假设。 *on_close - 表示使用 ConnectionReleaseMode.OnClose。保留此设置是为了向后兼容,但强烈建议不要使用它。 ...

我创建了一个集成测试,通过同时打开两个会话并操作同一实体来引发 StaleObjectException。为了确保测试完成后回滚所有内容,测试内容被放置在 TransactionScope 中;这会导致分布式事务启动,因为两个会话将针对同一环境事务打开数据库连接。我想将默认的 ConnectionReleaseMode 设置更改为“OnClose”,但如上所述,文档不建议这样做。谁能解释为什么改变默认行为不是一个好主意?


好吧,既然没有人打扰,我会尝试自己回答这个问题:-) 如果您使用一种在会话被处置时提交事务的模式(一个事务=一个会话),您不妨使用“OnClose”释放模式。如果您使用会话跨越多个事务的模式(例如每个业务事务的对话)http://dotnetchris.wordpress.com/2009/01/27/conversation-per-business-transaction-using-postsharp-and-ioc/ http://dotnetchris.wordpress.com/2009/01/27/conversation-per-business-transaction-using-postsharp-and-ioc/),使用“OnClose”会占用不必要的资源,因为在提交事务时您没有释放到连接池的连接。默认的“after_transaction”释放模式将在提交事务时释放您的连接,从而释放您宝贵的数据库连接。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

nhibernate 连接释放模式:为什么文档推荐使用“after_transaction”? 的相关文章

  • nhibernate 交替批量大小

    当使用 NHibernate 执行查询时 如果批处理大小设置为大于实际返回的结果 则似乎不考虑批处理大小 我正在使用最新版本的 NHibernate 2 1 0 4000 和 Linq to NHibernate 的 GA 我有一个类似于
  • NHibernate二级缓存性能问题

    我正在使用 NHibernate 使用每个请求会话模式开发一个 MVC 应用程序 大多数时候用户只是读取数据 因此我尝试通过以下方式使用 NHibernate 的二级缓存 我设置了 SysCache 并使所有持久实体可缓存 缓存使用 non
  • 如何急切加载列表/集合中的对象?

    我有以下查询 ObjectB objectBAlias null ObjectC objectCAlias null var query session QueryOver
  • select N + 1 比 eager join 更好吗?

    我正在使用 nhibernate profiler 并看到它在一些地方给我一个 Select n 1 警告 明显的解决方法是进行一些预先的热切连接 但这让我思考 在某些情况下 与可能会加载大量您从未实际使用的数据的连接相比 使用 Selec
  • 我可以在 NHibernate 中使用表值函数作为查询源吗?

    正如您可能已经猜到的 亲爱的社区 我有一个问题要问您 所以 我希望 NHibernate 根据表值 sql 函数的评估来过滤查询结果 NHibernate 生成的可能的 SQL 查询可能类似于以下内容 SELECT whatever FRO
  • NHibernate:无法解析继承的 id 属性

    我定义了以下实体 public class Foo Entity
  • NHibernate - 左连接

    我有以下两个表 JobsAreaID JobNo 复合键 Logs日志ID 区域ID 作业编号 我需要获取所有没有与之关联的日志的作业 在 SQL 中我可以这样做 SELECT Jobs AreaID Jobs JobNo FROM Job
  • 使用 NHibernate 深复制实体

    我目前正在工作中启动一个新的 ASP NET MVC 项目 我们需要生成项目成本估算 我们使用 NHibernate ASP NET MVC 1 0 和 StructureMap 客户希望能够填写有关项目的所有信息 这些信息位于不同的页面中
  • Fluent NHibernate IDictionary 具有复合元素映射

    我有这两门课 public class Category IDictionary
  • 将 Hibernate linq 查询转换为 HQL

    我知道 IQueryable 无法序列化 这意味着查询无法序列化 发送到 Web 服务 反序列化 查询然后发回 我想知道是否可以将 hibernate linq 查询转换为 hql 以通过网络发送 我还缺少另一条路线吗 我想我已经看到 AD
  • 使用二级缓存时,nhibernate 查询缓存和实体缓存有什么区别?

    我正在尝试设置 nhibernate 二级缓存我在这篇文章中看到 http www gitshah com 2012 03 nhibernate and caching part 2 html我想了解查询缓存和实体缓存之间的区别 它说你需要
  • NHibernate 表更新事件

    我有这个表映射 我认为细节并不重要 WithTable COPACKER FACILITY Id x gt x FacilityNumber FACILITY NUM GeneratedBy Sequence FACSEQ Map x gt
  • 多态性:ORM 实体是领域实体还是数据实体?

    我有一个 BankAccount 表 LINQ to SQL 生成一个名为 BankAccount 的类 如下所示 global System Data Linq Mapping TableAttribute Name dbo BankAc
  • 如何将 NHibernate 和 DTO 与 RIA 服务结合使用

    我将 NHibernate 与 RIA 服务和 Silverlight 4 一起使用 我创建 DTO 来通过 RIA 服务传输数据 而不是分发我的域层对象 根据 Martin Fowler 的分布式对象设计第一定律 不要分发您的对象 DTO
  • 将 nHibernate 3.x 与 Jet 驱动程序结合使用 (Microsoft Access)

    我正在开发一个 nHibernate 项目 该项目使用 Access 数据库作为数据源 不幸的是 我在运行时遇到问题 因为我找不到支持 nHibernate 3 x 的 Jet 驱动程序 我已经从 trunk 下载了源代码并编译了它 但事实
  • NHibernate 应如何更新映射为版本的属性

    使用流畅的 NHibernate 我在使用映射的类上有一个属性Version Version x gt x Version 当我保存对象时 Version 属性会按照我的预期在数据库中递增 但对象上的属性值似乎只是有时会发生变化 using
  • NHibernate 忽略长度属性

    运行 SQL Profiler 后 我意识到 NHibernate 正在将字符串映射到nvarchar 4000 我通过指定修复了它type AnsiString and length 在 hbm 文件中 现在正在生成varchar 800
  • 非法尝试将集合与两个开放会话关联 流畅的 nhibernate

    我有这个异常 非法尝试将集合与两个打开的会话关联 每次我保存包含子集合的实体时都会引发该异常 我用谷歌搜索一下 我发现在调用保存时我打开了两个或多个会话 但我确定我只使用了一个会话 我哪里做错了 我该如何解决这个问题 注意 我使用的是 MV
  • NHibernate 具有多个数据库和事务

    我们在理解如何最好地使用 NHibernate 时遇到了一些问题 我们通常拥有相对大量 就表数量而言 的 SQL Server 数据库 而不是一个包含大量对象的数据库 我们正在研究处理多个会话工厂的各种选项 并且可能已经控制住了这一点 但是
  • 对于返回超过1个值的SQL select,当Id为GUID时它们如何排序?

    我想知道 SQL Server 如何对查询返回的数据进行排序 并且各个表的 Id 列都是 uniqueidentifier 类型 我在创建所有 GUID 时使用 NHibernate GuidComb 并执行以下操作 Sheet sheet

随机推荐