我考虑为NHibernate持久化层编写自己的IUnitOfWork实现。
正确的做法似乎是在构造函数中实例化ISession和ITransaction,然后在析构函数或Dispose()方法中进行处理。
当然,如果有人调用Save()方法,则ISession将被刷新,ITransaction将被完成,因此在调用Save()之后,将没有一个有效的打开事务来再次保存,除非我提交第一个事务并立即打开另一个新事务。但这是个好主意吗?
从设计上讲,执行一次提交操作是有意义的,但我可能无法控制代码,其他开发人员可能不太遵循UnitOfWork模式。
如果尝试使UnitOfWork能够容忍每个会话中的多个事务,是否会失去/获得任何东西?还是应该检查是否存在打开的事务,并在已提交时抛出异常,而不是创建新事务?