2013年5月19日 星期日

ASP.NET MVC 與 ASP.NET WebForm 使用 Simple Injector 切換選擇不同 Repository 原始碼下載

將前面幾篇有關 Repository 分層以及使用 Simple Injector 的文章作為操作示範的 Solution 給做了整理,將一些程式內容做了點修改,然後為了可以讓下載的人可以開啟 Solution 後就可以執行,所以兩個 Web 專案加入了 LocalDB 的使用,姑且不論程式內容是不是寫得完整,主要是要讓大家了解其實資料存取的分層並不是只有限於 ASP.NET MVC 而已,而且同樣做好的 Repository 也是可以直接給 ASP.NET WebForm 來使用,並沒有所謂 ASP.NET MVC 與 ASP.NET WebForm 的 Repository 必須要分開寫的說法。

有關原始碼下載之後的使用與進階處理,就看文章內容的詳細說明。


原始碼下載位置

http://sdrv.ms/10EKGFX

檔案放在 SkyDrive 上面,不需要登入或是帳號就可以下載,

image

完整檔案名稱:AspNetMvcWebForm_3Repository.zip

 

2014-08-06 更新

不知道什麼時候開始,原本所提供的連結已經失效了,不想再繼續使用 OneDrive 來提供檔案,於是就乾脆把範例程式給放到 GitHub 上面,方便大家瀏覽程式以及直接下載,

GitHub Repository 位置:
https://github.com/kevintsengtw/ASPNET_MVC_WebForm_Repository_Sample

image

如果要下載完整的專案檔,請點選頁面上的「Download ZIP」項目,就可以將整個專案以壓縮檔的方式下載。

 

檔案內容

壓縮檔解開之後會看到以下的內容,

image

為了要減少檔案的大小,所以把從 NuGet 所下載安裝的 「packages」目錄給刪除,但還是可以在使用 Visual Studio 之後透過 NuGet 重新還原這些套件,另外也附上了範例資料庫的 Schema 檔案「Northwind.sql」,提供不想使用 LocalDB 的朋友做範例資料庫的建立。

 

開發環境

Visual Studio 2012(不適用 Visual Studio Express 2012 for Web)
MS SQL Server 2005, 2008, 2008 R2, 2012
.NET Framework 4.5
ASP.NET MVC 4 ( C# )
ASP.NET WebForm 4.5 ( C# )

 

開啟 Solution 以及使用 NuGet 還原安裝套件

以 Visual Studio 2012 開啟「Sample.sln」,下圖為開啟後在方案總管所看的 Solution 內容,

image

第一個方案資料夾「.nuget」,有使用 NuGet 還原的專案就會有這麼一個資料夾存在,

image

如果你不小心刪除了「.nuget」資料夾的話,可以參考 demo 的文章「誤刪 NuGet 還原資料夾處理方式 | demo小鋪」,以下是其餘方案資料夾內的專案,

image

在還沒有使用 NuGet 還原套件前可以直接對方案做重新建置,系統會自動把相關套件重新還原,

image

image

或者是可以使用 NuGet 還原安裝套件,首先是在方案按下右鍵並選擇「管理方案的 NuGet 套件」,

image

接著在開啟的管理 NuGet 套件視窗裡點選「還原」,點了之後就會開始還原方案所使用的套件,

image

image

還原完畢

SNAGHTML85112b1

有關使用 NuGet 還原套件的資料,可以參考 demo 另一篇文章「NuGet套件還原步驟使用Visual Studio 2012 為例 | demo小鋪」。

 

Web 專案裡的 LocalDB

會使用 LocalDB 的原因是為了讓下載原始碼後的朋友可以直接開啟 Solution 然後在使用 NuGet 還原套件以及重新建置後就可以直接看到結果,不需要還要另外花時間去重建 Solution 所使用的資料庫,

image

image

兩個 Web 專案的 Web.Config 裡對 LocalDB 的 ConnectionString 都是一樣的(無論是一般或是 EF 所使用的),

image

<;connectionStrings>
    <;add name="Northwind" 
         connectionString="Data Source=(LocalDB)\v11.0;attachdbfilename=|DataDirectory|\Sample.mdf;integrated security=True;" 
         providerName="System.Data.SqlClient" />;
    <add name="NorthwindEntities" 
         connectionString="metadata=res://*/Northwind.csdl|res://*/Northwind.ssdl|res://*/Northwind.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=(LocalDB)\v11.0;attachdbfilename=|DataDirectory|\Sample.mdf;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" 
         providerName="System.Data.EntityClient" />;
</connectionStrings>

如果你不想使用 LocalDB 而想使用 MS SQL Server,已經有建立 Northwind 是最好,或者是使用「Northwind.sql」重新建置資料庫,改使用一般的 MS SQL Server 就要修改 ConnectionString,如下:

<;connectionStrings>
    <;add name="Northwind" 
         connectionString="Data Source=你的資料庫位置;Initial Catalog=Northwind;Persist Security Info=True;User ID=帳號;Password=密碼" 
         providerName="System.Data.SqlClient" />;
    <add name="NorthwindEntities" 
         connectionString="metadata=res://*/Northwind.csdl|res://*/Northwind.ssdl|res://*/Northwind.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=你的資料庫位置;initial catalog=Northwind;persist security info=True;user id=帳號;password=密碼;MultipleActiveResultSets=True;App=EntityFramework&quot;" 
         providerName="System.Data.EntityClient" />;
</connectionStrings>

 

切換 Web.Config 使用的 Repository

在 MVC Web 專案或是 WebForm Web 專案的做法都是一樣的,可以藉由修改 Web.Config 裡 appSettings 的「RepositoryType」來達成不同 Repository 的切換使用,每更換一次都要重先建置專案後再執行,

Sample.Repository.ADONET

image

Sample.Repository.EntLibDAAB

image

Sample.Repository.EF

image

 

大致上就是如上面所說的,如果還有什麼不清楚或是有問題的地方,可以透過下面的回覆留言做討論,如果開發環境只有 Visual Studio 2010 的話,就請多擔待,我應該不會另外製作 VS2010 的版本,這個 Solution 的內容都還算簡單,所以可以自行依據原始碼來重新建置,因為 VS2010 無法使用 Enterprise Library 6 而只能使用 EntLib 5,程式大致上還是一樣的,再依據版本的不同做修改。

 

有關此範例原始檔的文章

ASP.NET MVC

ASP.NET MVC 的 Model 使用 ADO.NET

ASP.NET MVC 的 Model 使用 Enterprise Library 6 Data Access Application Block

ASP.NET MVC - 使用 Simple Injector 讓 Model 三選一

ASP.NET WebForm

ASP.NET WebForm 使用分層的 Repository 類別庫專案

ASP.NET WebForm 使用 Simple Injector 選擇不同的 Repository

 

以上

5 則留言:

  1. 謝謝版主分享,這系列真是用心,看你的文章,精進了自己不少分層的觀念 ^ ^.

    回覆刪除
    回覆
    1. 感謝你的回應,如有問題也歡迎討論。

      刪除
    2. 檔案好像過期了,不知道還可以分享一下嗎XD
      最近專案是asp.net web forms 4.5...想參考一下版大的分層架構

      刪除
    3. 我這幾天再重新整理一份然後放到 GitHub 上面

      刪除
    4. YA,昨天不能下載,今天可以了唷,謝謝!!!

      刪除

提醒

千萬不要使用 Google Talk (Hangouts) 或 Facebook 及時通訊與我聯繫、提問,因為會掉訊息甚至我是過了好幾天之後才發現到你曾經傳給我訊息過,請多多使用「詢問與建議」(在左邊,就在左邊),另外比較深入的問題討論,或是有牽涉到你實作程式碼的內容,不適合在留言板裡留言討論,請務必使用「詢問與建議」功能(可以夾帶檔案),謝謝。