我知道这类问题会导致激烈的战争。就我个人而言,我是 nHibernate 的忠实粉丝,我意识到没有 ORM 是完美的。我只是想确定是否有我不知道的充分理由,或者是否存在设计缺陷,因为更改它会破坏现有代码。
这是我正在描述的行为:
假设我有一个现有的ISession
命名session
,由于 nHibernate 不支持嵌套事务,以下代码不应该在第三行引发异常。
ITransaction tx = null;
tx = session.BeginTransaction();
tx = session.BeginTransaction();
如果我们假设当前线程上没有打开其他事务,那么第一次调用BeginTransaction()
确实会开始一个事务。然而,第二个仅返回现有事务。它给人的印象是支持嵌套事务。这是不好的命名法吗?
创建两种方法会更有意义吗?一种用于在开发人员不关心的情况下获取现有事务或在不存在的情况下创建一个事务,以及另一种专门创建新事务并在无法创建事务时失败的方法?
这个问题是关于 nHibernate 的,但也许这也适用于 Hibernate。