2009-09-09 77 views
2

我使用實體framwerok創建了DAL。我還創建了業務服務層和表示層(Web應用程序)。 我的常識是隻通過DAL告訴我連接字符串,但表示層也需要連接字符串。在哪裏把連接字符串放在一個n層應用程序中?

那麼這種情況的最佳做法是什麼?有什麼辦法只在DAL中擁有連接字符串嗎?

+7

爲什麼表現層需要的連接字符串? – 2009-09-09 19:49:25

+3

問:「是否有任何方法只能在DAL中使用連接字符串?」 答:是的,確保DAL是連接到數據庫的唯一層。 – marcc 2009-09-09 19:51:46

+0

C.Ross:當我從web.config中刪除連接字符串時,我得到一個錯誤: 在配置中找不到指定的命名連接,不打算與EntityClient提供程序一起使用,或無效。 這是grom DAL中的設計器文件。 marcc:在DAL中有edmx文件,這個層被引用到業務層,我有一個方法來查詢使用linq的實體。這個方法在表現層中用於獲取gridview的數據源。 – user137348 2009-09-09 20:15:10

回答

4

您通常將連接字符串放在配置文件中,並且使用的配置文件是執行程序集的配置文件。對於一個網站,它將是web.config。

爲什麼您的表示層需要訪問連接字符串?

2

您的連接字符串通常駐留在web.config中並從中訪問。除非你別無選擇,否則你可能不應該對連接字符串進行硬編碼(而且我不能想到任何你不會的情況)。

2

如果表示層需要連接字符串,那麼您的設計中存在缺陷。

+3

除非它是一個連接字符串編輯器 RichardOD 2009-09-09 19:56:44

+0

@RichardOD - 我在那裏提出這個警告,現在我必須upvote明顯。大聲笑 – 2009-09-09 19:58:52

2

數據抽象層應該是唯一訪問數據的地方。您的表示層應使用業務服務層,業務服務層應使用DAL進行數據訪問。因此,您不需要從表示層直接訪問數據源,並且連接字符串的唯一位置將位於DAL中。

+0

我理解這個理論,但在我的情況下,它並沒有像這樣工作。在我的DAL中,我正在使用實體框架。該層被引用到業務層。在這個層中,我有一個返回IEnumerable <>的L2E查詢。這個查詢是從表示層調用的,並被分配爲gridview的數據源。奇怪的想法是我需要表示層中的連接字符串,否則它將無法工作。我還需要在演示文稿中引用DAL,否則它將無法工作。我做錯了什麼,但我不知道... – user137348 2009-09-09 21:12:01

0

我有一個DAL在實例化時將連接字符串作爲參數。使用DAL的圖層負責獲取它。這樣,如果DAL位於Windows或Web應用程序中,則DAL不會更改。我的DAL也僅在每個應用程序中使用單例模式實例化一次,因此檢索連接字符串的開銷僅支付一次。

 public sealed class cApp 
     { 

     static readonly cDB _cDB = new cDB(
    ConfigurationManager.ConnectionStrings["MyConnString"].ConnectionString); 

     public static cDB DB 
      { 
       get 
       { 
        return _cDB; 
       } 
      } 

     } 

然後在代碼中,我可以用它喜歡:

GridView1.DataSource = cApp.DB.GetStages(id); 
    GridView1.DataBind(); 
相關問題