2010-11-29 59 views
1

我的主要問題是數據庫去哪裏?asp.net網站和數據庫在visual studio中的正確結構

該項目將在SVN上,並使用asp.net mvc存儲​​庫模式開發。我在哪裏把sql服務器數據庫(mdf文件)?如果我將它放在app_data中,那麼我的其他隊友可以檢出源和數據庫,並在數據庫部署在vs實例中運行它。

這種方法的問題是:

  1. 我不能使用SQL Management Studio中與該數據庫。
  2. 大多數網絡主機都要求我使用他們的UI或SQL Management Studio部署數據庫。把它放在應用數據中是沒有意義的。
  3. 每次我從本地測試遷移到在Web主機上進行測試時,都必須對連接字符串進行編輯。

如果我使用SQL Management Studio中創建數據庫時,我的問題是:

  1. 我如何保持這種一致性與源控制(因扎吉不得不重新腳本分貝,如果模式改變)。
  2. 再次連接字符串。 (我想在生產服務器上自動使用該字符串)。

有沒有解決上述所有問題的方法?也許我缺少某種形式的工具模式?

回答

1

基本上你的兩點是正確的 - 除非你正在處理中央數據庫,否則當別人進行更改時,每個人都必須更新數據庫。如果您正在使用中央數據庫,則還可以進入數據庫更改的問題(即:刪除了一列),並且未檢入相應的源代碼。然後,你都死在水中,直到檢入源代碼或數據庫被回滾。使用中央數據庫也意味着開發人員無法控制何時將數據庫模式更改推送給他們。

我們已經安裝了每個開發人員的計算機上的數據庫(尤其是好的,因爲我們針對不同的數據塊,每個開發者都有支持的數據庫給我們真的很好的跨平臺測試,因爲我們去的一個)。

然後是「發展」環境指向的中央「發展」數據庫。它通過持續集成每個簽入來構建,並且在成功構建/測試時發佈到開發中。需要簽入到源控制

變化,開發商使他們的本地計算機上的數據庫架構。它們是數據庫升級腳本,用於對數據庫進行從版本X到版本Y的所需更改。數據庫是版本控制的。當客戶升級時,這些數據庫腳本將在其數據庫上運行,以將其從當前版本升級到他們正在安裝的所需版本。

這些dbpatch文件存儲在以下結構:

./dbpatches 
    ./23 
     ./common 
      ./CONV-2345.dbpatch 
     ./pgsql 
      ./CONV-2323.dbpatch 
     ./oracle 
      ./CONV-2323.dbpatch 
     ./mssql 
      ./CONV-2323.dbpatch 

在上述樹中,版本23具有被任何數據庫上運行一個共同dbpatch(是ANSI SQL),而對於一個特定dbpatch三個數據庫需要供應商特定的SQL。

我們有一個數據庫更新腳本,開發人員可以運行它運行任何尚未在其開發計算機上運行的dbpatch(不考慮版本 - 因爲在單個版本的開發過程中可能會委託多個dbpatches進行源代碼管理)。

連接字符串被保持在NHibernate.config,但是如果存在的話,NHibernate.User.config來代替,然而NHibernate.User.config從源控制忽略。每個開發人員都有自己的NHibernate.User.config,它指向他們的本地數據庫並設置適當的方言等。

當推到開發中時,我們有一個NAnt腳本,它在配置模板中爲我們執行變量替換。這個腳本在升級時以及在發佈包時使用。 NAnt腳本使用環境設置文件中的變量值填充模板配置文件。

1

使用管理工作室或Visual Studios服務器資源管理器。 App_Data在「現實世界」中使用得並不多。

  1. 這總是一個問題。使用工具如SqlCompare from Redgate或Visual Studio 2010的內置數據庫比較工具。

  2. 使用Web.Config transformations可自動更新連接字符串。

+0

謝謝,我明白了上面這些Web.Config轉換的文章,但它並沒有告訴我該把這個文件放在哪裏以及如何連接它。 – 2010-11-29 00:39:28

+0

它在你的MVC項目的根目錄下自動創建。 – jfar 2010-11-29 00:50:06

1

我不以任何方式的專家,但這裏是我的夥伴和我做了我們最新的ASP.NET MVC項目:

連接字符串總是相同的,因爲我們都運行SQL Server Express在我們的開發機器上,以及我們的分段和生產服務器。您可以使用點而不是計算機名稱(例如「。\ SQLEXPRESS」或「。\ SQL_Named_Instance」)。

或者,您也可以使用web.config轉換部署到不同的機器。

就數據庫本身而言,我們剛剛在SVN存儲庫中創建了一個「數據庫更新」文件夾,並在需要更新時添加了新的SQL腳本。我一直認爲最好有一個有組織的數據庫更改腳本集合。

1

一個常見的解決方案,這種類型的問題是在代碼來處理數據庫中的版本而不是存儲數據庫本身的版本控制。代碼通常在app_start上執行,但可以通過其他方式觸發(構建/部署過程)。然後開發人員可以運行自己的本地數據庫或使用共享的開發數據庫。常見的術語稱爲數據庫遷移(從一個版本遷移到下一個版本)。這裏是一個計算器問題的.NET工具/庫來簡化這一過程:https://stackoverflow.com/questions/8033/database-migration-library-for-net

這是我處理這個與多個開發項目的唯一途徑。我已經與超過50位開發人員的團隊成功地使用了它,並且效果很好。

相關問題