我想在asp.net mvc控制器构造函数中使用session

时间:2011-05-14 09:08:59

标签: asp.net-mvc entity-framework

我是Mvc的新手。

对不起我的英文。 ^^

我对控制器中的asp.net MVC会话有一些疑问。

我想做的事情如下:

  1. 首先,我的开发环境是entityframework和mvc3。

  2. 当有人登录时,每个人都有不同的数据库。所以,每个都连接不同的数据库。

  3. 因此,每个人都有自己的会话值,即数据库连接字符串。到目前为止一切顺利。

  4. 我有简单的数据库存储库,每个存储库的构造函数都可以更改数据库连接。

  5. 在调用Repository类的控制器上,我需要会话值。但据我所知,控制器的构造无法保持会话价值。右

  6. 我想要你的好建议。提前致谢。

  7. 代码示例如下:

    public class MasterRepository 
    {
        DBEntities _db;
    
        public MasterRepository(string con)
        {
            _db = new DBEntities(con);
        }
    
    }
    
    public class TestController : Controller
    {
    
        private string con;
    
        MasterRepository _db;
    
        public TestController()
        {
        _db = new MasterRepository(Session["conn"].ToString()); //  Session is null I want to solve this Part...
        }
    
        public ActionResult Index()
        {
    
            string con = Session["conn"].ToString(); // Session is assigned.
    
            return View();
        }
    
    
    }     
    

2 个答案:

答案 0 :(得分:0)

我认为你错过了控制器的“服务”部分 - 服务 - 存储库模式:

http://weblogs.asp.net/fredriknormen/archive/2008/04/24/what-purpose-does-the-repository-pattern-have.aspx

但是当你沿着这条路走下去时,你可能也需要学习IoC。

然后你的代码看起来更像:

public class MasterRepository 
{
    public Foo GetAllFoo()
    {
        return ObjectContextManager.GetObjectContext().AsQueryable().ToList();
    }  
}

public class MasterService 
{
    MasterRepository _repository;   
    public MasterService(MasterRepository repository) // use IoC
    {
        _repository = repository;
    }
    public Foo GetAllFoo()
    {
        return _repository.GetAllFoo();
    }    
}    

public class TestController : Controller
{  
    MasterService _service;
    public TestController(MasterService service) // use IoC
    {
        _service = service;
    }

    public ActionResult Index()
    {    
        var model _service.GetAllFoo();   
        return View(model);
    }       
}     

答案 1 :(得分:0)