ASP.NET MVC 4 模型和資料存取
此實際操作實驗室假設您具備 ASP.NET MVC 的基本知識。 如果您之前未使用過 ASP.NET MVC,建議您 ASP.NET MVC 4 基本概念實際操作實驗室。
此實驗室會逐步引導您完成先前所描述的增強功能和新功能,方法是將次要變更套用至 Source 資料夾中提供的範例 Web 應用程式。
注意
所有範例程式代碼和代碼段都包含在 Web Camp 訓練工具包中,可在 Microsoft-Web/WebCampTrainingKit 版本取得。 此實驗室特定的專案可在MVC 4模型和數據存取 ASP.NET 取得。
在 ASP.NET MVC 基本 概念實際操作實驗室中,您已將硬式編碼的數據從控制器傳遞至檢視範本。 但是,若要建置實際的 Web 應用程式,您可能想要使用實際的資料庫。
此實際操作實驗室會示範如何使用資料庫引擎來儲存和擷取音樂市集應用程式所需的數據。 若要達成此目的,您將從現有的資料庫開始,並從中建立實體數據模型。 在此實驗室中,您將符合 Database First 方法,以及 Code First 方法。
不過,您也可以使用 Model First 方法、使用工具建立相同的模型,然後從中產生資料庫。
Database First 與 Model First
產生模型之後,您會在 StoreController 中做出適當的調整,以提供存放區檢視從資料庫取得的數據,而不是使用硬式編碼的數據。 您不需要對檢視範本進行任何變更,因為 StoreController 會將相同的 ViewModel 傳回至檢視範本,不過這次數據會來自資料庫。
程式代碼優先方法
Code First 方法可讓我們從程式代碼定義模型,而不產生通常與架構結合的類別。
首先,在程序代碼中,模型物件是使用POCO,「一般舊的CLR物件」來定義。 POCO 是沒有繼承且未實作介面的簡單一般類別。 我們可以從它們自動產生資料庫,或者我們可以使用現有的資料庫,並從程式代碼產生類別對應。
使用此方法的優點是模型與持續性架構(在此案例中為 Entity Framework)保持獨立,因為 POCO 類別不會與對應架構結合。
注意
此實驗室是以 ASP.NET MVC 4和自定義且最小化的音樂市集範例應用程式版本為基礎,只符合此實際操作實驗室中顯示的功能。
如果您想要探索整個音樂市集教學課程應用程式,您可以在MVC-Music-Store 中找到它。
必要條件
您必須有下列專案才能完成此實驗室:
- Microsoft Visual Studio Express 2012 for Web 或更上層版本 (如需如何安裝它的指示,請參閱 附錄 A )。
設定
安裝程式碼片段
為方便起見,您將在本實驗中管理的大部分程式碼都以 Visual Studio 程式碼片段的形式提供。 若要安裝程式碼片段,請執行 .\Source\Setup\CodeSnippets.vsi 檔案。
如果您不熟悉 Visual Studio 代碼段,而且想要瞭解如何使用這些代碼段,您可以參閱本檔中的附錄「附錄 C:使用代碼段」。
練習
此實際操作實驗室是由下列練習所組成:
注意
每個練習都附有一個 End 資料夾,其中包含完成練習後應獲得的結果解決方案。 如果您需要其他幫助來完成練習,您可以使用此解決方案作為指南。
完成此實驗室的估計時間: 35 分鐘。
練習 1:新增資料庫
在此練習中,您將瞭解如何將具有 MusicStore 應用程式的數據表的資料庫新增至解決方案,以取用其數據。 使用模型產生資料庫並新增至解決方案之後,您將修改 StoreController 類別,以提供檢視範本從資料庫擷取的數據,而不是使用硬式編碼的值。
工作 1 - 新增資料庫
在這項工作中,您會將已建立的資料庫新增至解決方案,其中包含 MusicStore 應用程式的主要數據表。
開啟位於 Source/Ex1-AddingADatabaseDBFirst/Begin/ 資料夾的 Begin 方案。
您必須先下載一些遺漏的 NuGet 套件,才能繼續。 為此,請按一下專案功能表並選擇管理 NuGet 套件。
在管理 NuGet 套件對話方塊中,按一下還原以下載遺失的套件。
最後,透過點擊 Build | Build Solution 來建立解決方案。
注意
使用 NuGet 的優點之一是您不必交付專案中的所有程式庫,從而減少了專案大小。 使用 NuGet Power Tools,透過在 Packages.config 檔案中指定套件版本,您將能夠在第一次執行專案時下載所有必要的程式庫。 這就是為什麼您在從本實驗室打開現有解決方案後必須執行這些步驟的原因。
新增 MvcMusicStore 資料庫檔案。 在此實際操作實驗室中,您將使用名為 MvcMusicStore.mdf 的已建立資料庫。 若要這樣做,請以滑鼠右鍵按兩下 App_Data 資料夾,指向 [ 新增 ],然後按兩下 [ 現有專案]。 流覽至 \Source\Assets ,然後選取 MvcMusicStore.mdf 檔案。
新增現有的專案
MvcMusicStore.mdf資料庫檔案
資料庫已新增至專案。 即使資料庫位於解決方案內,您也可以查詢並更新它,因為它裝載在不同的資料庫伺服器中。
方案總管 中的MvcMusicStore資料庫
確認資料庫的連線。 若要這樣做,請 按兩下MvcMusicStore.mdf 以建立連線。
線上到 MvcMusicStore.mdf
工作 2 - 建立數據模型
在這項工作中,您將建立數據模型,以與上一個工作中新增的資料庫互動。
建立代表資料庫的數據模型。 若要這樣做,請在 方案總管 以滑鼠右鍵按兩下 Models 資料夾,指向 [新增],然後按兩下 [新增專案]。 在 [新增專案] 對話框中,選取 [數據] 範本,然後選取 [實體數據模型] 專案 ADO.NET。 將數據模型名稱變更為 StoreDB.edmx ,然後按兩下 [ 新增]。
新增 StoreDB ADO.NET 實體數據模型
[實體數據模型精靈] 隨即出現。 此精靈將引導您建立模型層。 由於應該根據最近新增的現有資料庫來建立模型,請選取 [從資料庫 產生],然後按 [下一步]。
選擇模型內容
由於您要從資料庫產生模型,因此您必須指定要使用的連線。 按兩下 [ 新增連線]。
選取 [Microsoft SQL Server 資料庫檔案 ],然後按兩下 [ 繼續]。
選擇數據源對話框
按兩下 [瀏覽],然後選取您在 [App_Data] 資料夾中MvcMusicStore.mdf資料庫,然後按兩下 [確定]。
連線屬性
產生的類別應該具有與實體相同的名稱 連接字串,因此將其名稱變更為 MusicStoreEntities,然後按 [下一步]。
選擇數據連線
選擇要使用的資料庫物件。 由於實體模型只會使用資料庫的數據表,請選取 [數據表 ] 選項,並確定 也會選取 [在模型中 包含外鍵數據行] 和 [複數或單數化產生的物件名稱 ] 選項。 將模型命名空間變更為 MvcMusicStore.Model ,然後按兩下 [ 完成]。
選擇資料庫物件
注意
如果顯示 [安全性警告] 對話框,請按兩下 [ 確定 ] 以執行範本,併產生模型實體的類別。
資料庫實體圖表隨即出現,而將每個數據表對應至資料庫的個別類別將會建立。 例如, Albums 數據表會以 Album 類別表示,其中數據表中的每個數據行都會對應至類別屬性。 這可讓您查詢和使用代表資料庫中數據列的物件。
實體圖表
注意
T4 範本 (.tt) 會執行程式代碼來產生實體類別,並將以相同名稱覆寫現有的類別。 在此範例中,產生的程式代碼會覆寫 「Album」、“Genre” 和 “Artist” 類別。
工作 3 - 建置應用程式
在這項工作中,您將檢查模型產生已移除 專輯、 內容類型 和 藝術家 模型類別,但專案會使用新的數據模型類別成功建置。
選取 [建置] 功能表項,然後選取 [建置 MvcMusicStore] 來建置專案。
建置專案
專案已成功建置。 為什麼它仍然運作? 因為資料庫數據表有欄位,其中包含您在已移除類別 專輯 和 內容類型中所使用的屬性。
組建成功
雖然設計工具會以圖表格式顯示實體,但它們實際上是 C# 類別。 展開 方案總管 中的 StoreDB.edmx 節點,然後 StoreDB.tt,您會看到新的產生的實體。
產生的檔案
工作 4 - 查詢資料庫
在這項工作中,您將更新 StoreController 類別,如此一來,它就不會使用硬式編碼的數據,而是查詢資料庫以擷取資訊。
開啟 Controllers\StoreController.cs,並將下列字段新增至 類別,以保存名為 storeDB 的 MusicStoreEntities 類別實例:
(代碼段 - 模型和數據存取 - Ex1 storeDB)
public class StoreController : Controller { private MusicStoreEntities storeDB = new MusicStoreEntities();
MusicStoreEntities 類別會公開資料庫中每個數據表的集合屬性。 更新 Browse 動作方法,以擷取所有專輯的內容類型。
(代碼段 - 模型與資料存取 - Ex1 市集瀏覽 )
public ActionResult Browse(string genre) { // Retrieve Genre and its Associated Albums from database var genreModel = new Genre { Name = genre, Albums = this.storeDB.Albums.ToList() }; return this.View(genreModel); }
注意
您使用稱為 LINQ 的 .NET 功能(語言整合式查詢)來針對這些集合撰寫強型別查詢表示式,這會針對資料庫執行程式代碼,並傳回您可以針對其程式設計的物件。
如需 LINQ 的詳細資訊,請造訪 msdn 網站。
更新 索引 動作方法以擷取所有內容類型。
(代碼段 - 模型與資料存取 - Ex1 存放區索引 )
public ActionResult Index() { var genres = this.storeDB.Genres; return this.View(genres); }
更新 索引 動作方法以擷取所有內容類型,並將集合轉換成清單。
(代碼段 - 模型和數據存取 - Ex1 Store GenreMenu)
// GET: /Store/GenreMenu [ChildActionOnly] public ActionResult GenreMenu() { var genres = this.storeDB.Genres.Take(9).ToList(); return this.PartialView(genres); }
工作 5 - 執行應用程式
在這項工作中,您將檢查 [市集索引] 頁面現在會顯示儲存在資料庫中的內容類型,而不是硬式編碼的內容類型。 不需要變更檢視範本,因為 StoreController 會傳回與之前相同的實體,不過這次數據會來自資料庫。
重建方案,然後按 F5 以執行應用程式。
專案會在 [首頁] 頁面中開始。 確認 [內容類型] 功能表不再是硬式編碼清單,而且會直接從資料庫擷取數據。
從資料庫瀏覽內容類型
現在流覽至任何內容類型,並確認已從資料庫填入專輯。
從資料庫瀏覽專輯
練習 2:先使用程式代碼建立資料庫
在本練習中,您將瞭解如何使用 Code First 方法來建立具有 MusicStore 應用程式數據表的資料庫,以及如何存取其數據。
產生模型之後,您將修改 StoreController,以提供檢視範本從資料庫擷取的數據,而不是使用硬式編碼的值。
注意
如果您已完成練習 1 並已使用 Database First 方法,您現在將瞭解如何使用不同的程式取得相同的結果。 練習 1 通用的工作已標示為讓您閱讀更容易。 如果您尚未完成練習 1,但想要瞭解 Code First 方法,您可以從此練習開始,並取得主題的完整涵蓋範圍。
工作 1 - 填入範例數據
在這項工作中,您會在使用 Code-First 最初建立資料庫時,使用範例數據填入資料庫。
開啟位於 Source/Ex2-CreatingADatabaseCodeFirst/Begin/ 資料夾的 Begin 方案。 否則,您可以繼續使用完成上一個練習所獲得的 End 解決方案。
如果您開啟了提供的 Begin 解決方案,則需要先下載一些缺少的 NuGet 包,然後才能繼續。 為此,請按一下專案功能表並選擇管理 NuGet 套件。
在管理 NuGet 套件對話方塊中,按一下還原以下載遺失的套件。
最後,透過點擊 Build | Build Solution 來建立解決方案。
注意
使用 NuGet 的優點之一是您不必交付專案中的所有程式庫,從而減少了專案大小。 使用 NuGet Power Tools,透過在 Packages.config 檔案中指定套件版本,您將能夠在第一次執行專案時下載所有必要的程式庫。 這就是為什麼您在從本實驗室打開現有解決方案後必須執行這些步驟的原因。
將 SampleData.cs 檔案新增至 Models 資料夾。 若要這樣做,請以滑鼠右鍵按兩下 Models 資料夾,指向 [ 新增 ],然後按兩下 [ 現有專案]。 流覽至 \Source\Assets ,然後選取 SampleData.cs 檔案。
範例數據填入程序代碼
開啟Global.asax.cs檔案,然後新增下列 using 語句。
(代碼段 - 模型和數據存取 - Ex2 Global Asax Usings)
using MvcMusicStore.Models; using System.Data.Entity;
在 Application_Start() 方法中,新增下列這一行來設定資料庫初始化表達式。
(代碼段 - 模型和數據存取 - Ex2 Global Asax SetInitializer)
protected void Application_Start() { AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); Database.SetInitializer(new SampleData()); }
工作 2 - 設定資料庫的連線
既然您已將資料庫新增至我們的專案,您將會在 web.config 檔案中寫入 連接字串。
在 Web.config 中新增 連接字串。若要這樣做,請在專案根目錄開啟Web.config,並將名為DefaultConnection的 連接字串取代為 connectionStrings> 區段中的這一行:<
Web.config 檔案位置
<configuration> ... <connectionStrings> <add name="MusicStoreEntities" connectionString="data source=(LocalDb)\v11.0;initial catalog=MvcMusicStore;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\MvcMusicStore.mdf" providerName="System.Data.SqlClient" /> </connectionStrings> ...
工作 3 - 使用模型
既然您已設定資料庫的連線,您將會連結模型與資料庫數據表。 在這項工作中,您將建立類別,以使用 Code First 連結至資料庫。 請記住,應該修改現有的 POCO 模型類別。
注意
如果您已完成練習 1,您會注意到此步驟是由精靈執行。 藉由執行 Code First,您將手動建立將連結至數據實體的類別。
從 Models 專案資料夾開啟 POCO 模型類別內容類型,並包含識別碼。 使用名稱為 GenreId 的 int 屬性。
(代碼段 - 模型與資料存取 - Ex2 程式代碼第一流派)
namespace MvcMusicStore.Models { using System.Collections.Generic; public class Genre { public int GenreId { get; set; } public string Name { get; set; } public string Description { get; set; } public List<Album> Albums { get; set; } } }
現在,從 Models 專案資料夾開啟 POCO 模型類別 [專輯],並包含外鍵、使用 Name GenreId 和 ArtistId 建立屬性。 這個類別已經有 主鍵的 GenreId 。
(代碼段 - 模型和數據存取 - Ex2 Code First 專輯)
namespace MvcMusicStore.Models { public class Album { public int AlbumId { get; set; } public int GenreId { get; set; } public int ArtistId { get; set; } public string Title { get; set; } public decimal Price { get; set; } public string AlbumArtUrl { get; set; } public virtual Genre Genre { get; set; } public virtual Artist Artist { get; set; } } }
開啟 POCO 模型類別 Artist,並包含 ArtistId 屬性。
(代碼段 - 模型和數據存取 - Ex2 Code First Artist)
namespace MvcMusicStore.Models { public class Artist { public int ArtistId { get; set; } public string Name { get; set; } } }
以滑鼠右鍵按下 Models 項目資料夾,然後選取 [ 新增] |類別。 將檔案 命名為MusicStoreEntities.cs。 然後按一下新增。
新增專案
新增類別
開啟您剛建立、 MusicStoreEntities.cs的類別,並包含命名空間 System.Data.Entity 和 System.Data.Entity.Infrastructure。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data.Entity; using System.Data.Entity.Infrastructure; ...
取代類別宣告以擴充 DbContext 類別:宣告公用 DBSet 並覆寫 OnModelCreating 方法。 在此步驟之後,您將取得將模型與 Entity Framework 連結的網域類別。 若要這樣做,請將類別程序代碼取代為下列專案:
(代碼段 - 模型和數據存取 - Ex2 Code First MusicStoreEntities)
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data.Entity; using System.Data.Entity.Infrastructure; namespace MvcMusicStore.Models { public class MusicStoreEntities : DbContext { public DbSet<Genre> Genres { get; set; } public DbSet<Album> Albums { get; set; } public DbSet<Artist> Artists { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<Genre>().ToTable("Genres"); modelBuilder.Entity<Album>().ToTable("Albums"); modelBuilder.Entity<Artist>().ToTable("Artists"); base.OnModelCreating(modelBuilder); } } }
注意
使用 Entity Framework DbContext 和 DBSet ,您將能夠查詢 POCO 類別內容類型。 藉由擴充 OnModelCreating 方法,您會在 程式代碼 中指定將流派對應至資料庫數據表的方式。 您可以在此 msdn 文章中找到 DBContext 和 DBSet 的詳細資訊: 連結
工作 4 - 查詢資料庫
在這項工作中,您將更新 StoreController 類別,如此一來,它就不會使用硬式編碼的數據,而是從資料庫擷取它。
注意
此工作與練習 1 很常見。
如果您已完成練習 1,您會注意到這些步驟在兩種方法中都相同(資料庫優先或程式代碼優先)。 數據與模型連結的方式不同,但對數據實體的存取卻從控制器而言是透明的。
開啟 Controllers\StoreController.cs,並將下列字段新增至 類別,以保存名為 storeDB 的 MusicStoreEntities 類別實例:
(代碼段 - 模型和數據存取 - Ex1 storeDB)
public class StoreController : Controller { private MusicStoreEntities storeDB = new MusicStoreEntities(); ... }
MusicStoreEntities 類別會公開資料庫中每個數據表的集合屬性。 更新 Browse 動作方法,以擷取所有專輯的內容類型。
(代碼段 - 模型與資料存取 - Ex2 市集瀏覽 )
public ActionResult Browse(string genre) { // Retrieve Genre and its Associated Albums from database var genreModel = new Genre { Name = genre, Albums = this.storeDB.Albums.ToList() }; return this.View(genreModel); }
注意
您使用稱為 LINQ 的 .NET 功能(語言整合式查詢)來針對這些集合撰寫強型別查詢表示式,這會針對資料庫執行程式代碼,並傳回您可以針對其程式設計的物件。
如需 LINQ 的詳細資訊,請造訪 msdn 網站。
更新 索引 動作方法以擷取所有內容類型。
(代碼段 - 模型和資料存取 - Ex2 市集索引)
public ActionResult Index() { var genres = this.storeDB.Genres; return this.View(genres); }
更新 索引 動作方法以擷取所有內容類型,並將集合轉換成清單。
(代碼段 - 模型和數據存取 - Ex2 Store GenreMenu)
// GET: /Store/GenreMenu [ChildActionOnly] public ActionResult GenreMenu() { var genres = this.storeDB.Genres.Take(9).ToList(); return this.PartialView(genres); }
工作 5 - 執行應用程式
在這項工作中,您將檢查 [市集索引] 頁面現在會顯示儲存在資料庫中的內容類型,而不是硬式編碼的內容類型。 不需要變更檢視範本,因為 StoreController 會傳回與之前相同的 StoreIndexViewModel ,但這次數據會來自資料庫。
重建方案,然後按 F5 以執行應用程式。
專案會在 [首頁] 頁面中開始。 確認 [內容類型] 功能表不再是硬式編碼清單,而且會直接從資料庫擷取數據。
從資料庫瀏覽內容類型
現在流覽至任何內容類型,並確認已從資料庫填入專輯。
從資料庫瀏覽專輯
練習 3:使用參數查詢資料庫
在此練習中,您將瞭解如何使用參數查詢資料庫,以及如何使用查詢結果成形,這項功能可減少資料庫以更有效率的方式存取擷取數據的數目。
注意
如需查詢結果成形的詳細資訊,請流覽下列 msdn 文章。
工作 1 - 修改 StoreController 從資料庫擷取專輯
在這項工作中 ,您將變更 StoreController 類別,以存取資料庫,以從特定內容類型擷取專輯。
如果您想要使用 Code-First 方法或 Source\Ex3-QueryingTheDatabaseWithParametersCodeFirst\Begin 資料夾,請開啟位於 Source\Ex3-QueryingTheDatabaseWithParametersDBFirst\Begin 資料夾的 Begin 方案。 否則,您可以繼續使用完成上一個練習所獲得的 End 解決方案。
如果您開啟了提供的 Begin 解決方案,則需要先下載一些缺少的 NuGet 包,然後才能繼續。 為此,請按一下專案功能表並選擇管理 NuGet 套件。
在管理 NuGet 套件對話方塊中,按一下還原以下載遺失的套件。
最後,透過點擊 Build | Build Solution 來建立解決方案。
注意
使用 NuGet 的優點之一是您不必交付專案中的所有程式庫,從而減少了專案大小。 使用 NuGet Power Tools,透過在 Packages.config 檔案中指定套件版本,您將能夠在第一次執行專案時下載所有必要的程式庫。 這就是為什麼您在從本實驗室打開現有解決方案後必須執行這些步驟的原因。
開啟 StoreController 類別以變更 Browse 動作方法。 若要這樣做,請在 [方案總管] 中展開 [控制器] 資料夾,然後按兩下 [StoreController.cs]。
變更 Browse 動作方法,以擷取特定內容類型的專輯。 若要這樣做,請取代下列程式代碼:
(代碼段 - 模型和數據存取 - Ex3 StoreController BrowseMethod)
public ActionResult Browse(string genre) { // Retrieve Genre and its Associated Albums from database var genreModel = this.storeDB.Genres.Include("Albums") .Single(g => g.Name == genre); return this.View(genreModel); }
注意
若要填入實體的集合,您必須使用 Include 方法來指定也想要擷取專輯。 您可以使用 。LINQ 中的 Single() 擴充功能,因為在此情況下,專輯只預期有一個內容類型。 Single() 方法會採用 Lambda 運算式作為參數,在此情況下會指定單一 Genre 物件,使其名稱符合定義的值。
您將利用一項功能,讓您在擷取 Genre 物件時也指出您想要載入的其他相關實體。 這項功能稱為 查詢結果成形,可讓您減少存取資料庫以擷取資訊所需的次數。 在此案例中,您會想要預先擷取您所擷取之內容類型的專輯。
此查詢包含 Genres.Include(“Albums”) 以指出您也想要相關的專輯。 這會導致更有效率的應用程式,因為它會在單一資料庫要求中擷取內容類型和專輯數據。
工作 2 - 執行應用程式
在這項工作中,您將執行應用程式,並從資料庫擷取特定內容類型的專輯。
按 F5 以執行應用程式。
專案會在 [首頁] 頁面中開始。 將 URL 變更為 /Store/Browse?genre=Pop ,以確認結果是從資料庫擷取。
流覽 /Store/Browse?genre=Pop
工作 3 - 依標識符存取專輯
在這項工作中,您將重複先前的程式,依其標識碼取得專輯。
視需要關閉瀏覽器,以返回 Visual Studio。 開啟 StoreController 類別以變更 Details 動作方法。 若要這樣做,請在 [方案總管] 中,展開 [控制器] 資料夾,然後按兩下 [StoreController.cs]。
變更 Details 動作方法,根據專輯標識符擷取專輯詳細數據。若要這樣做,請取代下列程式代碼:
(代碼段 - 模型和數據存取 - Ex3 StoreController DetailsMethod)
// GET: /Store/ public ActionResult Details(int id) { var album = this.storeDB.Albums.Find(id); if (album == null) { return this.HttpNotFound(); } return this.View(album); }
工作 4 - 執行應用程式
在這項工作中,您會在網頁瀏覽器中執行應用程式,並依其標識碼取得專輯詳細數據。
按 F5 以執行應用程式。
專案會在 [首頁] 頁面中開始。 將 URL 變更為 /Store/Details/51 ,或瀏覽內容類型,然後選取專輯以確認結果是從資料庫擷取。
流覽 /Store/詳細數據/51
注意
此外,您可以遵循 附錄 B:使用 Web Deploy 發佈 ASP.NET MVC 4 應用程式,將此應用程式部署至 Windows Azure 網站。
摘要
藉由完成此實際操作實驗室,您已瞭解 ASP.NET MVC 模型和數據存取的基本概念,以及使用 Database First 方法,以及 程式代碼優先 方法:
- 如何將資料庫新增至解決方案,以取用其數據
- 如何更新控制器以提供檢視範本,其中包含取自資料庫的數據,而不是硬式編碼的範本
- 如何使用參數查詢資料庫
- 如何使用查詢結果成形,這項功能可減少數據庫存取次數,以更有效率的方式擷取數據
- 如何在 Microsoft Entity Framework 中使用 Database First 和 Code First 方法,將資料庫與模型連結
附錄 A:安裝 Visual Studio Express 2012 for Web
您可以使用 Microsoft Web 平台安裝程式安裝 Microsoft Visual Studio Express 2012 for Web 或其他「Express」版本。 以下說明將引導您使用 Microsoft Web 平台安裝程式安裝 Visual studio Express 2012 for Web 所需的步驟。
移至 [/iis/extensions/introduction-to-iis-express/iis-express-overview?linkid=9810169](/iis/extensions/introduction-to-iis-express/iis-express-overview?linkid=9810169)。 或者,如果您已安裝 Web Platform Installer,您可以開啟它,並搜尋產品「Visual Studio Express 2012 for Web with Windows Azure SDK」。
按一下立即安裝。 如果您沒有 Web 平台安裝程式,您將被重定向到首先下載並安裝它。
Web 平台安裝程式開啟後,按一下安裝開始安裝。
安裝 Visual Studio Express
閱讀所有產品的授權和條款,然後按一下我接受繼續。
接受授權條款
等待下載和安裝過程完成。
安裝進度
安裝完成後,按一下完成。
安裝完成
按一下退出關閉 Web 平台安裝程式。
若要開啟 Visual Studio Express for Web,請前往開始畫面並開始編寫 VS Express,然後按一下 VS Express for Web 圖格。
VS Express Web 圖格
附錄 B:使用 Web Deploy 發佈 ASP.NET MVC 4 應用程式
本附錄將說明如何從 Windows Azure 管理入口網站建立新的網站,併發佈您遵循實驗室取得的應用程式,並利用 Windows Azure 所提供的 Web Deploy 發佈功能。
工作 1 - 從 Windows Azure 入口網站建立新網站
移至 Windows Azure 管理入口網站,並使用與您訂用帳戶相關聯的Microsoft認證登入。
注意
透過 Windows Azure,您可以免費裝載 10 ASP.NET 網站,然後在流量成長時進行調整。 您可以在這裡註冊。
登入 Windows Azure 管理入口網站
點選命令列上的新建。
建立一個新網站
點選計算 | 網站。 然後選擇快速建立選項。 提供新網站的可用 URL,然後按一下建立網站。
注意
Windows Azure 網站是可在雲端中執行之 Web 應用程式的主機,您可以控制及管理。 [快速建立] 選項可讓您從入口網站外部將已完成的 Web 應用程式部署至 Windows Azure 網站。 它不包括設定資料庫的步驟。
使用快速建立建立新網站
等待新網站建立完成。
建立網站後,點擊 URL 列下的連結。 檢查新網站是否正常運作。
瀏覽新網站
網站運作中
返回入口網站並點擊名稱列下的網站名稱以顯示管理頁面。
開啟網站管理頁面
在儀表板頁面的快速瀏覽部分下,按一下下載發布設定檔連結。
注意
發行 配置檔 包含針對每個啟用的發行方法,將 Web 應用程式發佈至 Windows Azure 網站所需的所有資訊。 發布設定檔包含連接到啟用了發布方法的每個端點並對其進行身份驗證所需的 URL、使用者憑證和資料庫字串。 Microsoft WebMatrix 2,Microsoft Visual Studio Express for Web 和 Microsoft Visual Studio 2012 支援讀取發佈配置檔,以自動設定這些程式,以將 Web 應用程式發佈至 Windows Azure 網站。
下載網站發布設定檔案
將發布設定檔下載到已知位置。 在本練習中,您將瞭解如何使用此檔案從Visual Studio將Web應用程式發佈至 Windows Azure 網站。
儲存發布設定檔
任務 2 - 設定資料庫伺服器
如果您的應用程式使用 SQL Server 資料庫,您將需要建立 SQL Database 伺服器。 如果您想要部署一個不使用 SQL Server 的簡單應用程式,您可以跳過此任務。
您將需要一個 SQL Database 伺服器來儲存應用程式資料庫。 您可以從 Windows Azure 管理入口網站中的訂用帳戶,在 Sql Databases | Server 伺服器的儀錶板中檢視 SQL 資料庫 伺服器。 | 如果您尚未建立伺服器,可以使用命令列上的新增按鈕建立伺服器。 記下伺服器名稱和 URL、管理員登入名稱和密碼,因為您將在接下來的任務中使用它們。 暫時不要建立資料庫,因為它將在稍後階段建立。
SQL Database 伺服器儀表板
在下一個任務中,您將測試 Visual Studio 中的資料庫連結,因此您需要將本機 IP 位址包含在伺服器的允許 IP 位址清單中。 為此,請按一下設定,從目前用戶端 IP 位址中選擇 IP 位址並將其貼上到起始 IP 位址和結束 IP 位址文字方塊中,然後按一下
按鈕。
新增用戶端 IP 位址
將用戶端 IP 位址新增至允許的 IP 位址清單後,按一下儲存以確認變更。
確認更改
任務 3 - 使用 Web 部署發布 ASP.NET MVC 4 應用程式
返回 ASP.NET MVC 4 解決方案。 在方案總管中,以滑鼠右鍵按一下網站專案並選擇發布。
發佈網站
匯入您在第一個任務中儲存的發布設定檔。
導入發布設定檔
點擊驗證連線。 驗證完成後,按一下下一步。
注意
當您看到驗證連線按鈕旁邊出現綠色複選標記時,驗證就完成了。
驗證連接
在設定頁面的資料庫部分下,按一下資料庫連結文字方塊 (即 DefaultConnection) 旁的按鈕。
網路部署設定
設定資料庫連結如下:
在伺服器名稱中,使用 tcp: 首碼輸入 SQL Database 伺服器 URL。
在使用者名稱中輸入您的伺服器管理員登入。
在密碼中輸入您的伺服器管理員登入密碼。
輸入新的資料庫名稱。
設定目標連接字串
然後按一下 [確定] 。 當提示建立資料庫時,按一下是。
建立資料庫
用於連接到 Windows Azure 中的 SQL 資料庫的連接字串顯示在預設連接文字方塊中。 然後按一下 [下一步]。
指向 SQL 資料庫的連接字串
在預覽頁面中,按一下發布。
發布 Web 應用程式
發布過程完成後,您的預設瀏覽器將開啟已發布的網站。
附錄 C:使用代碼段
有了程式碼片段,您就可以輕鬆獲得所需的所有程式碼。 實驗文件會準確告訴您何時可以使用它們,如下圖所示。
使用 Visual Studio 程式碼片段將程式碼插入專案中
使用鍵盤新增代碼段 (僅限 C#)
- 將遊標置於要插入程式碼的位置。
- 開始輸入程式碼片段名稱 (不含空格或連字元)。
- 觀看 IntelliSense 顯示符合的片段名稱。
- 選擇正確的程式碼片段 (或繼續輸入,直到選擇整個程式碼片段的名稱)。
- 按兩次 Tab 鍵可將程式碼片段插入到遊標位置。
開始輸入片段名稱
按 Tab 鍵選擇已反白的片段
再按 Tab 鍵,片段將會展開
若要使用滑鼠新增代碼段 (C#、Visual Basic 和 XML) 1。 以滑鼠右鍵按一下要插入程式碼片段的位置。
- 選擇插入片段,然後選擇我的程式碼片段。
- 按一下從清單中選擇相關片段。
以滑鼠右鍵按一下要插入程式碼片段的位置,然後選擇插入片段
按一下從清單中選擇相關片段