2013-07-05 65 views
1

數據訪問對象我必須制定一個WEB API爲我的當前項目。我的數據庫是POSTGRESQL,我沒有使用Entity Framework。我有我自己的數據訪問層。現在,每個控制器的每個(GETPUTPOSTDELETE等)方法中我想訪問數據庫。現在我的問題是什麼是實例化數據訪問層對象的正確方法。以下兩種方法: -
實例化在ASP .NET WEB API

  1. 在每個控制器的每個方法中實例化它,並在完成工作後將其銷燬。但我認爲每次實例化和銷燬對象都是一件昂貴的事情。
  2. 它實例全局一次,並且從每個控制器的每個方法訪問它。

什麼是正確的做法呢?

,我將非常感激。

+0

我想你需要向我們展示至少一些來自*數據訪問層對象*的代碼。如果您在每種方法中創建/放棄它,那麼您(很可能)不必處理線程同步問題。如果您嘗試創建並重用它,情況可能如此。 – user1429080

回答

2

正確這個問題的答案取決於你如何執行你的數據訪問層非常多。話雖如此,但肯定可以給你一些可以幫助你的一般指標。在C#中創建單個對象通常不是一個特別昂貴的操作,而是附加到那些往往很昂貴的對象上的資源。由於postgresql C#提供程序支持連接池(我假設您使用的是the npgsql driver?),因此每次實例化一個數據訪問對象時都不會創建到數據庫的新連接,而是將連接保存在池中並分配如您的代碼所要求的。因此,爲了避免複雜性和狀態處理,最簡單的方法可能是在控制器的每種方法中創建一個新對象。

另外,您可以添加數據訪問對象的私有字段到控制器,並在控制器中的假設所有的控制方法需要你的數據訪問層的構造函數實例化。這可能有助於避免一些代碼重複,並且在兩種情況下對象的生命週期都非常相似,即每個請求一個對象。