我创建了一个提供给我的IRepository实现的IDbContext对象。 DbContext为我的业务逻辑提供了一种方法,可以根据需要创建,提交和回滚事务和提交。它还传输我的NHibernate ISession,因此我的NHibernate实现可以访问它。
我在Web应用程序中使用此设置,其中每个请求创建一个DbContext并由所有存储库共享。在请求结束时,我处理了ISession。
通过您对标准NHibernate实践的经验或知识,当我处理并即将关闭会话时,让我的DbContext刷新并提交任何未完成的事务(假设没有错误)是否可以接受?
答案 0 :(得分:1)
是的,上次我至少检查过,我相信这是S#arp架构中使用的架构。从逻辑上讲,我认为 - 如果没有任何错误,为什么你不想将所有内容提交到数据库?
答案 1 :(得分:1)
这是一种常见的做法,当然可以接受,但不是我喜欢的。我认为它有一个明显的缺点,即请求的结束为时已晚,无法执行有意义的异常处理。我更喜欢在页面上处理事务,以便我可以捕获异常并在那里处理它们。实际上,如果当前的ISession有一个打开的事务,我会在EndRequest处理程序中抛出一个异常。