2012-10-19 158 views
0

我正在使用MVC3,目前我正在遵循一个练习,以便为每个控制器声明一个DB容器实例。我对该控制器的每个请求使用该容器实例。如果我需要去我的模型查询或某事,我发送该实例作为参数模型的功能。因此,对于整个应用程序,我创建并使用4-5个不同的DB Container类实例。我的问题是,这对我的数据库操作有好的或坏的影响?创建一个单独的容器实例是否重要?什么是使用容器类的正确方法?使用LINQ-to-SQL容器

我相信上面提到的类叫做DBContext。

+0

Ur控制器应该直接与DB容器交谈......这不是一个好方法.. – Developer

回答

1

我不知道它是什么你的意思,但我可以给你一个方法的一个例子,我宁可之后往往:

创建的的DbContext

public class MyDomainService : IDisposable 
{ 
    private MyDbEntities dbo; 
    private bool isDisposed; 

    public MyDomainService() 
    { 
     dbo = new MyDbEntities(); 
    } 

    public User GetUser(string userName) 
    { 
     return (from usr in dbo.Users 
       where usr.UserName == userName 
       select usr).SingleOrDefault(); 
    } 

    public void Dispose() 
    { 
     if (isDisposed) 
      return; 
     isDisposed = true; 
     dbo.Dispose(); 
    } 
} 
一种“类的DomainService”的

创建扩展ControllerAsyncController 定制控制器类和重写InitializeDispose方法:

public class MyController : Controller 
{ 

    protected MyDomainService DomainService { get; private set; } 

    protected override void Initialize(System.Web.Routing.RequestContext 
             requestContext) 
    { 
     base.Initialize(requestContext); 
     DomainService = new MyDomainService(); 
    } 

    protected override void Dispose(bool disposing) 
    { 
     DomainService.Dispose(); 
     base.Dispose(disposing); 
    } 

} 

现在你可以使用在每个例子中HomeController以下办法继承MyController

public class HomeController : MyController 
{ 

    public ActionResult Index() 
    { 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult Index(string username) 
    { 
     var user = DomainService.GetUser(username); 
     if (user != null) 
      return RedirectToAction("Account", "Information"); 
     return View(); 
    } 

} 

这将让你的控制器而干净。