2016-03-07 61 views
0

在我的控制,我調用庫類調用存儲過程,SQL ...等MVC語法調用庫類

即控制器看起來:

Repository repo = new Repository(); 

public ActionResult Index() 
{ 
     var getservice = repo.GetList(...); 

     foreach (var servicegroup in ServicesSelected) 
     { 
       var Result = repo.CheckStatus(...); 
      .... 
     } 
    } 

我的倉庫類如下所示:每當我調用sp或do數據庫操作時,我都會圍繞使用(用於實現IDispose)和調用上下文。

示例在這個動作中調用GetList(),然後有一個它調用的循環, 5次,每次它產生一個新的上下文,我不認爲這是每次產生新的上下文的正確方法。

什麼是用「一個方面」,還可以使用「使用」中的每個庫函數來實現IDispose或者我不應該使用「使用」,並創建了IDisposable類

樣品的例子是很多的正確方法讚賞正確的方法。

更新 - 想用DI框架

在我的HomeController做我需要添加引用庫類?

public class HomeController : Controller 
{ 
    SubscriptionRepository _repo; 

    public HomeController (Repository repo) 
    { 
     _repo = repo; 
    } 

裏面的索引操作調用庫類

_repo.GetList(...); 

裏面庫類,做我做同樣的我在HomeController的那樣?

public class Repository 
{ 
    private MyAppConnection _context; 

    public Repository(MyAppConnection context) 
    { 
     _context = context; 
    } 

然後從我的的checkStatus使用撈出剛

public int CheckStatus(...) 
    { 
     return _context.sp_web_Status(...); 
    } 
} 

,並在NinjectWebCommon:RegisterServices

才能註冊兩者兼而有之?

kernel.Bind<Repository>().ToSelf().InRequestScope(); 
kernel.Bind<MyAppConnection>().ToSelf().InRequestScope(); 

這是使用DI框架和配置MyAppConnection的正確方法嗎? 如果我在Repository類中正確地做了更多的關注?

+1

不回答你的問題,但你不應該在控制器中創建存儲庫實例。最好將它們注入到構造函數中,並使用像autofac或structuremap這樣的DI容器來配置它們。這可能有助於:http://www.codeproject.com/Articles/562871/MVC-Repository-Pattern-with-Entity-Framework-and-s DI容器也可以爲您管理這些對象的生命週期。 – Magrangs

+0

任何人都可以確認?如果語法正確? – Ben

回答

2

我個人我使用依賴注入(DI)框架來管理我的數據庫上下文和存儲庫,我也有一個DBcontext爲我的web應用程序,這有助於跟蹤變化。我發現這個解決方案比使用上下文模式好得多。這裏是一個非常好的簡單的文章,解釋模式,你可以使用

http://www.davepaquette.com/archive/2013/03/27/managing-entity-framework-dbcontext-lifetime-in-asp-net-mvc.aspx

+0

我想添加DI,我感到困惑..我在HomeController構造函數中添加Repository ref,然後在Repository構造函數類中添加上下文ref?我已經更新了我的問題,你能幫我理解它嗎?如果我直接在控制器中執行sp,您提供的鏈接工作。我希望我所有的數據庫操作員都能在存儲庫類中感謝 – Ben

+0

我認爲你最好的選擇是閱讀一本關於依賴注入的好書。我可以在.net中推薦由Mark Seeman,DI撰寫的書。在實施它之前,您需要了解它。 – Magrangs

-1

你可以包住整個foreach環在using塊,然後通過上下文變量作爲參數傳遞給CheckStatus()方法。

+0

Downvotes?我知道這不是一個好的設計模式,但它回答了這個問題。請至少解釋一下。 – faso

+0

這不是我。感謝你的幫助。 – Ben