ASP.NET MVC:在视图呈现后运行代码(关闭db事务)

时间:2010-03-31 00:17:17

标签: asp.net-mvc nhibernate

我正在使用带有NHibernate的ASP.NET MVC2,但我遇到了一个问题。通过NHibernate对数据库的所有调用都应该在事务中,但视图中的代码在某些情况下会启动数据库调用。因此,需要能够在呈现视图之后提交事务。

例如,显示用户及其用户角色列表,您可以使用以下代码显示用户角色:<%:Model.UserRole.Name%>

当使用NHibernate代理加载UserRole时,这将导致数据库命中。

在这种情况下,您可以急切地获取UserRole来解决问题,但是在某些情况下使用延迟加载要快得多。

无论如何,有没有办法在视图渲染后运行代码?

2 个答案:

答案 0 :(得分:3)

您是否尝试过使用会话请求模式?这是在Web环境中处理NHibernate会话的一种非常自然的方式。

当您针对“每个请求的NHibernate会话”进行Google搜索时,可以获得许多信息,例如this blog post

另外,请看看Bill McCafferty的文章NHibernate Best Practices。虽然它是为NHibernate 1.2编写的,但它有丰富的信息。在那里,他的S#arp Architecture看起来也很酷:)

答案 1 :(得分:2)

动作过滤器怎么样?

public class CleanUpAttribute: ActionFilterAttribute
{
    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
        //cleanup code here
    }
}

然后用这个属性装饰你的控制器。

相关问题