0

编辑我的会议会自动关闭吗?

Orignal标题:我的交易在到达我的回购时关闭。我究竟做错了什么?

我得到一个答案,我origanl问题(我忘了打开事务笑)。现在我想知道如果我的代码是自动关闭会话,或者我必须以某种方式告诉它执行此操作。


我使用MVC 3.0,NHibernate的,流利的NHibernate和ninject 2.0

的Global.asax

// Note: For instructions on enabling IIS6 or IIS7 classic mode, 
    // visit http://go.microsoft.com/?LinkId=9394801 

    public class MvcApplication : System.Web.HttpApplication 
    { 
     public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
     { 
      filters.Add(new HandleErrorAttribute()); 
     } 

     public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

      routes.MapRoute(
       "Default", // Route name 
       "{controller}/{action}/{id}", // URL with parameters 
       new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
      ); 

     } 

     protected void Application_Start() 
     { 
      // Hook our DI stuff when application starts 
      SetupDependencyInjection(); 


      AreaRegistration.RegisterAllAreas(); 

      RegisterGlobalFilters(GlobalFilters.Filters); 
      RegisterRoutes(RouteTable.Routes); 
     } 


     public void SetupDependencyInjection() 
     {   
      // Tell ASP.NET MVC 3 to use our Ninject DI Container 
      DependencyResolver.SetResolver(new NinjectDependencyResolver(CreateKernel())); 
     } 

     protected IKernel CreateKernel() 
     { 
      var modules = new INinjectModule[] 
           { 
           new NhibernateModule(), 
           new ServiceModule(), 
           new RepoModule() 
           }; 

      return new StandardKernel(modules); 
     } 

    } 

会话工厂

public class NhibernateSessionFactory 
    { 
     public ISessionFactory GetSessionFactory() 
     { 
      ISessionFactory fluentConfiguration = Fluently.Configure() 
                .Database(MsSqlConfiguration.MsSql2008.ConnectionString(c => c.FromConnectionStringWithKey("test"))) 
                .Mappings(m => m.FluentMappings.AddFromAssemblyOf<MyMaps>()) 
                .BuildSessionFactory(); 

      return fluentConfiguration; 
     } 
    } 

会话工厂提供商

public class NhibernateSessionFactoryProvider : Provider<ISessionFactory> 
    { 
     protected override ISessionFactory CreateInstance(IContext context) 
     { 
      var sessionFactory = new NhibernateSessionFactory(); 
      return sessionFactory.GetSessionFactory(); 
     } 
    } 

Nhibernate的模块

public class NhibernateModule : NinjectModule 
    { 
     public override void Load() 
     { 
      Bind<ISessionFactory>().ToProvider<NhibernateSessionFactoryProvider>().InSingletonScope(); 
      Bind<ISession>().ToMethod(context => context.Kernel.Get<ISessionFactory>().OpenSession()).InRequestScope(); 
     } 
    } 

服务模块

public class ServiceModule : NinjectModule 
    { 
     public override void Load() 
     { 
      Bind<ITest>().To<Test>(); 
     } 
    } 

回购模块

public class RepoModule : NinjectModule 
    { 
     public override void Load() 
     { 
      Bind<IStudentRepo>().To<StudentRepo>(); 
     } 
    } 

的HomeController

private readonly ITest test; 
     public HomeController(ITest test) 
     { 
      this.test = test; 
     } 

     // 
     // GET: /Home/ 
     public ActionResult Index() 
     { 
      return View(); 
     } 

测试(我的服务层文件)

public class Test : ITest 
    { 
     private readonly IStudentRepo studentRepo; 

     public Test(IStudentRepo studentRepo) 
     { 
      this.studentRepo = studentRepo; 
     } 

    } 

回购

public class StudentRepo : IStudentRepo 
    { 
     private readonly ISession session; 

     public StudentRepo(ISession session) 
     { 
      this.session = session; 
     } 
    } 

当我通过我的调试器看一下将进入我的回购会话。它表示会话已打开并已连接,但是(session.Transaction).IsActive = false

+1

你从哪里开始交易? – Vadim 2011-01-23 01:01:08

回答