2012-12-03 52 views
1

我的控制器需要獲取傳回視圖的數據。我應該在哪裏打開連接以傳遞到存儲庫?這是一個例子。這是我的一個控制器的一部分。我應該在我的控制器中打開數據庫連接嗎?

using (var connection = this.GetActiveConnection()) 
{ 
    var repository = new RefRepository(connection); 
    var codes = repository.GetPoACodes();  
} 

在控制器中打開連接是不好的做法嗎?如果我沒有通過控制器傳遞它,我應該在哪裏將連接傳遞給存儲庫?

+0

爲了讓您完全置身事外,您應該在Model命名空間內完成。也許我問你,你爲什麼不想在Model命名空間內做到這一點? :) – gardarvalur

+0

爲什麼要將連接傳遞給存儲庫?你在你的應用中使用了幾個數據庫嗎?這是一個多租戶系統嗎?如果是這樣,這將是一個不同的用例進行分析。 – Nathan

回答

4

實際上,存儲庫必須自己處理連接,它不應該是控制器所關心的。 控制器類必須保持精簡,如果它變胖,這將是一種代碼異味。

如果您可以使用依賴注入框架(如Ninject,StructureMap等)來連接這些依賴關係,處理DbContext或Session和SessionFactory(EF或NHibernate),事務或單元工作模式,異常處理和日誌記錄,如果你想到目前爲止。

如果您使用的是Visual Studio,那麼在Project Templates中還有一個選項可以創建存儲庫,您可以創建示例項目,閱讀代碼並瞭解代碼的組織方式。

在這個article,在Web API頭下,你可以找出如何做到這一點。

1

不,您不應該在控制器上打開數據庫連接。

控制器應該與您的「域模型」交談,這與您的數據庫模式不一樣。

就你而言,也許你的存儲庫必須處理它。或者更多,如果你使用Entity Framework或NHibernate,例如,最好讓他們處理這件事。

相關問題