2012-10-19 76 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(); 
    } 

} 

這將讓你的控制器而乾淨。