2

我创建了一个 IDbContext 对象,该对象提供给我的 IRepository 实现。DbContext 为我的业务逻辑提供了一种根据需要创建、提交和回滚事务和提交的方法。它还传输我的 NHibernate ISession,因此我的 IRepository 的 NHibernate 实现可以访问它。

我在 Web 应用程序中使用此设置,其中每个请求创建一个 DbContext 并由所有存储库共享。在请求结束时,我处理了 ISession。

根据您对标准 NHibernate 实践的经验或知识,当我正在处理并即将关闭会话时,是否可以让我的 DbContext 刷新并自动提交任何未完成的事务(前提是没有错误)?

4

2 回答 2

1

是的,至少上次我检查时,我相信这是 S#arp 架构中使用的架构。我认为这在逻辑上也是有道理的——如果没有任何错误,你为什么不想将所有内容都提交到数据库中?

于 2010-06-29T01:19:38.630 回答
1

这是一种常见的做法,当然是可以接受的,但这不是我喜欢的做法。我认为它有一个明显的缺点,即请求的结束来不及执行有意义的异常处理。我更喜欢在页面上处理事务,以便我可以捕获异常并在那里处理它们。事实上,如果当前 ISession 有一个打开的事务,我会在 EndRequest 处理程序中抛出一个异常。

于 2010-06-29T02:05:38.637 回答