2013-08-23 44 views
0

美好的一天給大家!linq-to-sql asp mvc - 在哪裏訪問數據上下文?

目前正在使用Linq to Sql來處理數據庫的asp-mvc 2項目。

我在asp mvc中看到很多關於Linq到sql的文檔,我的問題是,恰恰是我訪問我的數據上下文的地方?什麼地方有更好的表現?

例如,我有MyDBDataContext

我可以在我的控制器

public class ImaginaryController : Controller 
{ 
    MyDBDataContext context = new MyDBDataContext(); 

    public ActionResult Index() 
    { 
     var list = // some code to read context 
     return View(list); 
    }   
    } 
    ....... 

或者,在操作方法定義

public class ImaginaryController : Controller 
{ 


    public ActionResult Index() 
    { 
     MyDBDataContext context = new MyDBDataContext(); 
     var list = /* some code to read context */; 
     return View(list); 
    } 


    public ActionResult Create() 
    { 
     //but create need reference 
     MyDBDataContext context = new MyDBDataContext(); 
     var list = /* some code to read context */; 
     return View(list); 
    } 

    } 

另一種選擇是創建一個類來訪問數據

public class AccesToBD{ 
    //maybe 
    private MyDBDataContext current; 

    public static MyDBDataContext GetContext(){ 
     return current; 
    } 
} 

或更復雜的東西,如Implementing the Singleton Pattern in C#

什麼是最好的解決方案?爲什麼?感謝您的回答。

回答

1

理想情況下,你會想爲此使用依賴注入。在它的基本形式中,您可以將數據庫上下文注入到控制器構造函數中。這樣,你就不必創建所有的控制器/行動等背景下的新實例..

這樣做的一個很好的例子可以在這裏找到:

ASP.NET MVC 4 Dependency Injection - Hands On Lab

它基本上有助於將任何直接訪問您的數據邏輯從控制器/操作中分離 - 這是非常重要的,如果您需要更改您的數據存儲方法等。

+0

不知道是否應該遵循相同的結構? – user2547522

+0

它當然可以。有些代碼可能略有不同,但該模式可以100%用於MVC 2. – Darren

+1

依賴注入是一種設計模式 - 意味着它實際上並沒有直接與asp.net有任何關係。這是一種讓事情變得更輕鬆的方法。有可用的庫,例如Unity和Ninject,允許您在特定項目中使用此模式。 – Darren