簡體   English   中英

在ASP.NET WebAPI中添加處理SQL連接字符串的方法的適當位置在哪里

[英]Where is the proper place to add a method to handle SQL Connection String in ASP.NET WebAPI

我擁有一組遵循相同架構的數據庫,並且已經在應用程序的“模型”層中提取了相關的表。 我正在使用SQLConnections處理與數據庫的連接,並使用數據適配器和數據表來存儲信息,以及將信息移回並通過控制器等。下面的代碼是我當前正在使用的代碼,目前可以正常使用:

using (SqlConnection con =    
    new SqlConnection(
    "server=MyServersIp\\NameofInstance; " +
    "initial catalog=thisisvariable;" +
    "user id=username;" +
    "password=password123;")) { /* Stuff happening here */ }

我想在這里使用的是這樣的東西:

using (SqlConnection con =    
    new SqlConnection(getConnectionString("databaseIdentifier")) 
    { 
        /* Stuff  still happening here */ 
    }

所以我正在尋找放置我的方法的正確位置:

public string getConnectionString(string databaseIdentifier)
{ 
    String theConnectionStringIneed = "appropriateConnectionString"
    return theConnectionStringIneed; 
}

在結構等方面,我對MVC和Web API還是很陌生,我想確保遵循最佳實踐。

我的問題是這種方法在標准結構中應該去哪里? 我希望可以從任何地方訪問它,以使整個連接字符串進程保持DRY,但是我還需要使其具有一定的動態性(基於數據庫標識符輸入的確定輸出)

這似乎是一個簡單的問題,但是經過一些專門的搜索后,我所能找到的只是關於如何使用實體框架或如何從模型等生成數據庫的示例,而不是使用連接字符串。

請指教,並一如既往地感謝您。

這是為了回答您的更籠統的問題:“我的問題是這種方法應該在標准結構中放到哪里?”,並通過一些體系結構的思想對其進行了擴展。

不知道您是否已經這樣做了,盡管在這種情況下,我會將您的數據庫任務(如所有CRUD和連接內容一樣)放入其自己的項目-數據訪問層中。.將該項目與模型分開。 -這種直接回答您最初的問題“應該去哪里...”

然后,您可以向模型圖層添加參考。 (假設您自己擁有所有模型的項目)

這將這兩個保持分開。 為什么? 好吧,有一天您可能決定使用Entity Framework或其他與數據庫通信的方法。 如果是這種情況,那么您只需要更改數據訪問層即可。 而且,您可以使模型看起來仍然煥然一新。

如果您想真正解決問題,那么可以創建另一個項目,該項目位於您的網站和現在新的數據訪問層之間-稱為服務。 這將是您的數據庫和網站之間的中間人。

您可以從網站控制器中調用此中間人服務。 然后,中間人服務運行到數據訪問層。 該層進入數據庫,獲取數據,填充模型並將其返回給中間人。 您的中間人現在將應用與您的站點相關的任何業務邏輯,還將數據模型轉換為視圖模型(僅用於您要顯示的網站視圖的模型的瘦版本)之類的東西-這具有不向其中發送大型復雜對象的優勢您的渲染視圖。 它還將業務邏輯(通常與調用中間人的項目直接相關)與數據訪問和模型層隔離。

現在事情已經很好地分解了,您可以隨着需求的變化而切換。

因此,總的來說,這是一個外行術語。工作流程如下:

  • 用戶點擊鏈接

  • 網站控制器被擊中以獲取數據...

  • 控制器向服務中間人索要數據,但是控制器只需要一點數據,因此索要一個小版本(ViewModel)

  • 服務中間人說:“好的,給我一點時間。”

  • 然后,服務中間人運行到數據訪問層,並說“給該數據給我”,並要求一個完整的模型(數據庫中的一行)

  • 然后,中間人從數據訪問層取回它,並說:“嗯。控制器說他不需要這些屬性的一半。”因此,中間人創建了ViewModel的實例(您定義了一個模型) 。

  • 然后,中間人用數據訪問層提供給它的模型中的數據填充該實例(視圖模型)。

  • 中間人可能還會做一些其他的事情,例如業務邏輯的事情。

  • 然后,他將其交還給管制員,並說:“您去了”。

  • 然后,控制器將其返回到其動作結果中。

有一種有趣的小方法來解釋它:D

一點注意事項

您提到過,人們通常似乎是根據模型創建數據庫的-這稱為“代碼優先”。 您也可以執行數據庫優先-聽起來確實不錯。

為此,我將推薦Entity Framework Powertools 它具有一個很棒的逆向工程工具,可以從數據庫中構建所有模型和關系。 怪胎太棒了!

如果將連接字符串放在web.config中,則可以使用ConfigurationManager.ConnectionStrings:

var connectionString = ConfigurationManager
    .ConnectionStrings["ConnectionName"].ConnectionString;

MSDN

我最終在WebApiConfig.cs文件中添加了一個公共靜態方法。 此方法接受一個標識符,然后返回連接字符串。 只需要一個,這樣就可以了。 我正在繼續前進,但是如果有人贊成或反對這種方法,我很樂意聽到。 我現在正在學習這些內容,並且Web API與Web Forms相去甚遠。 感謝大家的關注!

   public static string getConnectionString()
    {
        return "the connection string";
    }

編輯:在查看其他答案中的評論之后,我還添加了我將把連接字符串的更好部分存儲在web.config中,並且僅使用getConnectionString()方法從ConfigurationManager中提取並添加到初始目錄,連接字符串的唯一更改部分。 感謝大家的關注。

@Darren:我肯定也會研究N-Tier架構,因為它看起來是一種非常穩定的處理方式,盡管我認為目前為止這不在我的意圖范圍之內。 感謝所有方面的出色信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM