简体   繁体   English

从控制器获取Nhibernate ISession(每个请求会话)ASP.Net MVC

[英]Getting Nhibernate ISession from Controller (Session Per Request) ASP.Net MVC

I have seen many posts of how to setup a session per request in Asp.Net MVC by using ActionFilter or by a DI package to inject the session into the controller. 我已经看过许多有关如何通过使用ActionFilter或通过DI包将会话注入控制器中的方式在Asp.Net MVC中为每个请求设置会话的文章。 What I wanted to know was, will it be a bad idea/pattern to just make an extension method like : 我想知道的是,仅仅制作一个扩展方法,例如:

public static ISession GetNHibernateSession(this Controller controller)
 {
   return SessionFactory.OpenSession();
 }

so that the session can be instantiated when required like : 这样可以在需要时实例化会话,例如:

public ActionResult DoSomething()
    {
      using(  var session = this.GetNHibernateSession())
        {
           // Do something with the session
        }

    }

reasons why this may be a good/bad idea will be greatly appreciated 为什么这可能是个好主意的原因将不胜感激

Good: 好:

  • It's simple 这很简单
  • It just works 才行

Bad: 坏:

  • You are doing session management, even if it's just a three lines, all over your code 您正在整个代码中进行会话管理,即使只有三行
  • With an extension method, you can't replace the behavior for testing 使用扩展方法,您不能替换测试行为

In short, for small, RAD and proof-of-concept projects, your idea will work just fine. 简而言之,对于小型RAD和概念验证项目,您的想法会很好地起作用。 For more complex development, it's probably better to extract session management from the controllers, at least moving it to a base class. 对于更复杂的开发,最好从控制器中提取会话管理,至少将其移至基类。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何使用Nhibernate在ASP.NET MVC中实现按请求的会话模式 - How to implement session-per-request pattern in asp.net mvc with Nhibernate 从ASP.Net MVC的控制器中的请求中获取#路由 - Getting the # route in from the Request in a controller in ASP.Net MVC Autofac,NHibernate ISession和MVC每个请求的事务。 正确处理会话和事务是什么样子? - Autofac, NHibernate ISession and MVC transaction-per-request. What does properly working with a Session and Transaction look like? ASP.NET C#+ Nhibernate HTTP模块(每个请求会话)-限制请求类型 - ASP.NET C# + Nhibernate HTTP module (Session per request) - restrict request types 从另一个类在ASP.Net MVC Controller中设置会话 - Set session in ASP.Net MVC Controller from another class 在 ASP.NET 核心 MVC 中从 controller 添加 session 超时 - Add session timeout from controller in ASP.NET Core MVC ASP.NET MVC按请求注入 - ASP.NET MVC inject per request 从 Controller 获取 Select 选项值:ASP.NET MVC - Getting Select Option Value from Controller : ASP.NET MVC 从控制器获取价值以在ASP.NET MVC中进行查看 - Getting value from controller to view in ASP.NET MVC 我没有从 ASP.NET MVC 中的控制器获取值 - I am not getting values from controller in ASP.NET MVC
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM