文章目錄
- 沒有串連串的情況
- 通過串連串顯式制定
- 沒有串連串的情況
- 通過串連串顯式制定
原文名稱:EF Code First and Data Scaffolding with the ASP.NET MVC 3 Tools Update
原文地址:http://weblogs.asp.net/scottgu/archive/2011/05/05/ef-code-first-and-data-scaffolding-with-the-asp-net-mvc-3-tools-update.aspx
我們剛剛發布了 ASP.NET MVC3 的工具更新,安裝地址:http://asp.net/mvc
在今天的部落格中,我將詳細介紹這次更新帶來的兩個酷的特性:
- 對 EF4.1 的內建支援,包括 Code First
- 通過 Visual Studio 支援內建的資料腳手架支援,這可以使你迅速建立資料驅動的網站。
這兩個特徵對 Web 應用程式提供了強大的支援。
我們將要建立的目標
為了協助說明如何使用這兩個特性,我們將建立一個簡單的資料驅動網站,這個網站可以列出我們的產品。
下面是建立或者編輯新產品的時候,分類資訊也同樣。
我們現在就建立整個應用,包括背景資料庫,使用 ASP.NET MVC3 只需要一到兩分鐘就可以。
Step 1: 建立新項目
我們通過建立一個新的 ASP.NET MVC3 項目開始,點擊 檔案 -> 建立項目,我們使用 Internet 項目模板,這將為我們的應用提供一個預設的起始模板。
當你在解決方案管理器中觀察新建立的項目時,你將會看到 ASP.NET MVC3 更新後的工具增為我們的 ASP.NET MVC3 項目增加了一個新的程式集 EntityFramework 。
EntityFramework 程式集實現了 Entity Framework4.1 ,EF4.1 為 .NET 的資料訪問提供了巨大的改進,包括 Code First。EF Code First 提供了完全優雅和乾淨的資料處理方式 ,使你不再需要設計器或者 XML 的對應檔。通過 ASP.NET MVC3 項目就可以簡單的使用這個優點。
我們將使用 EF Code First 來實現項目的資料訪問。
Step 2: 實現資料模型類
第一步,我們將建立兩個類,Product 和 Category,我們應用程式的資料模型,我們在 Models 檔案中中建立標準的 POCO “簡單的老的 C# 對象” 。代碼如下:
注意到上面的類是標準的 .NET 資料類型,不需要派生自任何基類,也不需要實現任何介面。
對於每個單獨的屬性,每個類有一個關聯屬性,例如,Product 類有一個名為 Category 的屬性使開發人員可以擷取產品所屬的 Category ,而 Category 類中有一個名為 Products 的屬性,使得開發人員可以擷取分類的所有產品,EF Code First 可以自動管理這些關聯(使用主外鍵關係),還可以在後台消極式載入資料。
Step 3: 使用 EF Code First 實現 StoreContext 類
現在,我們已經定義了兩個模型類,下一步我們將要實現 DbContext 類,使用 EF Code First 需要使用這個類將模型對象映射到資料庫中表,我們的實現如下所示:
我們使用 StoreContext 類映射我們的 Product 和 Category 與資料庫的關係,它派生自 EF Code First 中的 DbContext,提供了兩個屬性關聯到資料庫中的表,對於我們的例子來說,使用預設的“約定勝於配置”方式,這意味著 Products 屬性對應到資料庫中的 Products 表,Categories 映射到資料庫中的 Categories 表。在博文的後面,我還將討論如何?自訂的映射。
你可以將這個類加入到解決方案的任何位置,例如,可以放置在 \Models 檔案夾中,或者放在一個獨立的類庫項目中,可能你需要在代碼的前面增加對於命名空間 System.Data.Entity 的引用。DbContext 和 DbSet 定義在其中。
Step 4: 搭建 Categories 控制器的腳手架
我們已經建立了從資料庫擷取或者儲存資料的所有內容。現在,我們建立一個 ASP.NET MVC 的控制器來實現對於分類資料的建立/編輯/刪除/更新,從前的時候,你不得不手動寫一個控制器來完成這些功能,包括你自己實現通過 EF Code First 訪問資料代碼,現在,ASP.NET MVC3 工具更新現在包括內建的腳手架支援協助你自動完成這些工作。
搭建一個新的 Categories 控制器類,我們在 /Controllers 檔案夾上右鍵,然後選擇 增加 Add -> 控制器 Controller 操作功能表。
然後,彈出增加控制器 Add Controller 的對話方塊,我們對建立的控制器命名為 CategoriesController,現在的對話方塊支援一個新的 腳手架節,允許我們使用內建的模板來搭建控制器。
我們選擇 Controller With read/Write action and views, using Entity Framework 模板,這將使建立的控制器包括完整的 EF 增、刪、改、查 代碼。
在選擇這個模板之後,我們選擇控制器使用的模型類,來實現 CRUD 支援,這裡是 Dategory 類,我們也選擇 EF DbContext/ObjectContext 類來訪問資料庫,在這裡,使用我們前面定義的 StoreContext 類。
當我們點擊 Add 按鈕的時候,Visual Studio 將會自動建立一個 CategoriesController 類,包括實現了Create、Edit、Details、Delete 和 Index Action 方法, 還有每一個 Action 相關的視圖模板。
如果開啟 CategoriesController.cs ,將會發現 Action 方法中已經實現了通過 EF 的資料訪問支援。
我們已經實現了訪問 Categories 資料的所有代碼。
Step 5: 設定資料庫的位置
在運行之前,我們的最後一步我們使用的資料庫位置。EF Code First 允許使用現有的資料庫,也允許使用目前還不存在的資料庫,可以通過模型類來自動建立它。
沒有串連串的情況
預設情況下,你甚至不需要配置串連串來指明資料庫。如果沒有指明,EF Code First 將在 SQL Express 中建立一個與你的 DbContext 同名的資料庫,例如,我們現在將會在本地的 .\SQLExpress 中建立一個名為 ScaffoldingDemo.Models.StoreContes 的資料庫。
通過串連串顯式制定
你還可以在 web.config 中增加一個串連串的配置來顯式指定,串連串的名字需要匹配 DbContext 類的名字,例如,在我們的應用中,DbContext 的名字是 StoreContext,預設情況下,EF 將會尋找同名的串連串來決定資料庫的位置。
下面是我們使用儲存在 App_Data 檔案夾中名為 Store.sdf 的嵌入的 SQL CE 資料庫配置。
<configuration>
<connectionStrings>
<add name="StoreContext"
connectionString="Data Source=|DataDirectory|\Store.sdf"
providerName="System.Data.SqlServerCe.4.0" />
</connectionStrings>
</configuration>Step 6: 運行應用
好啦!現在我們運行這個應用,導航到 /Categories ,這將會執行 CategoriesController 的 Index 方法,列出資料庫中所有的分類,當前還沒有分類。
點擊 Create New 連結來建立一個新的分類,這會導航到 /Categories/Create ,這個 Action 提供了一個建立新分類的表單。
點擊 Create 將會 Post 到 CategoriesController ,添加新的分類到資料庫中,重複這個操作,我們可以建立多個不同的分類。
非常酷的一點在於,我們不需要寫任何的控制器或者視圖就可以完成!
腳手架自動產生了需要的代碼,這提供了一個簡單的起點,我們可以繼續調整它來定製更多的功能。
Step 7: 關注資料庫
我們現在配置程式使用嵌入式的資料庫 SQL CE,當運行程式的時候,如果資料庫還不存在,那麼 EF 4.1 將會檢測到這一點,然後自動建立它,基於我們前面定義的 Product 和 Category 類。
要想在解決方案中看到資料庫,在解決方案管理器的上面點擊重新整理按鈕,然後,EF 自動建立的 Store.sdf 將會出現在 App_Data 檔案夾下。
你可以通過雙擊這個資料庫,在伺服器總管中開啟它,然後展開 Tables ,就可以看到剛剛建立的表。
注意 EF 建立的表基於 Product 和 Category 類,還根據類中屬性的定義,自動建立了主鍵和兩表之間的關聯。
Step 8: 搭建 Product 控制器的腳手架
我們已經建立了 CategoriesController 來管理分類,下面我們建立 ProductsController 來管理產品。
就向前面一樣,我們在 \Controller 檔案夾上右鍵,選擇 Add -> Controller 來建立 ProductsController,我們使用 EF 模板和 Product 模型類。
點擊 Add 按鈕之後,ProductsController 已經搭建完成,包括 CRUD 方法和相應的視圖。
我們可以運行一下,導航到 /Products。
點擊 Create New 來建立產品
很酷的是分類是一個下拉式清單,而不是一個填寫外鍵的文字框。
在 Visual Studio 中支援的腳手架很聰明地檢測到關聯的分類,EF 代碼自動關聯正確的分類。
在建立一些產品之後,訪問 /Products 顯示的效果如下。
注意分類資訊是使用友好的名稱顯示出來,而不是一個外索引值。
原文名稱:EF Code First and Data Scaffolding with the ASP.NET MVC 3 Tools Update
原文地址:http://weblogs.asp.net/scottgu/archive/2011/05/05/ef-code-first-and-data-scaffolding-with-the-asp-net-mvc-3-tools-update.aspx
我們剛剛發布了 ASP.NET MVC3 的工具更新,安裝地址:http://asp.net/mvc
在今天的部落格中,我將詳細介紹這次更新帶來的兩個酷的特性:
- 對 EF4.1 的內建支援,包括 Code First
- 通過 Visual Studio 支援內建的資料腳手架支援,這可以使你迅速建立資料驅動的網站。
這兩個特徵對 Web 應用程式提供了強大的支援。
我們將要建立的目標
為了協助說明如何使用這兩個特性,我們將建立一個簡單的資料驅動網站,這個網站可以列出我們的產品。
下面是建立或者編輯新產品的時候,分類資訊也同樣。
我們現在就建立整個應用,包括背景資料庫,使用 ASP.NET MVC3 只需要一到兩分鐘就可以。
Step 1: 建立新項目
我們通過建立一個新的 ASP.NET MVC3 項目開始,點擊 檔案 -> 建立項目,我們使用 Internet 項目模板,這將為我們的應用提供一個預設的起始模板。
當你在解決方案管理器中觀察新建立的項目時,你將會看到 ASP.NET MVC3 更新後的工具增為我們的 ASP.NET MVC3 項目增加了一個新的程式集 EntityFramework 。
EntityFramework 程式集實現了 Entity Framework4.1 ,EF4.1 為 .NET 的資料訪問提供了巨大的改進,包括 Code First。EF Code First 提供了完全優雅和乾淨的資料處理方式 ,使你不再需要設計器或者 XML 的對應檔。通過 ASP.NET MVC3 項目就可以簡單的使用這個優點。
我們將使用 EF Code First 來實現項目的資料訪問。
Step 2: 實現資料模型類
第一步,我們將建立兩個類,Product 和 Category,我們應用程式的資料模型,我們在 Models 檔案中中建立標準的 POCO “簡單的老的 C# 對象” 。代碼如下:
注意到上面的類是標準的 .NET 資料類型,不需要派生自任何基類,也不需要實現任何介面。
對於每個單獨的屬性,每個類有一個關聯屬性,例如,Product 類有一個名為 Category 的屬性使開發人員可以擷取產品所屬的 Category ,而 Category 類中有一個名為 Products 的屬性,使得開發人員可以擷取分類的所有產品,EF Code First 可以自動管理這些關聯(使用主外鍵關係),還可以在後台消極式載入資料。
Step 3: 使用 EF Code First 實現 StoreContext 類
現在,我們已經定義了兩個模型類,下一步我們將要實現 DbContext 類,使用 EF Code First 需要使用這個類將模型對象映射到資料庫中表,我們的實現如下所示:
我們使用 StoreContext 類映射我們的 Product 和 Category 與資料庫的關係,它派生自 EF Code First 中的 DbContext,提供了兩個屬性關聯到資料庫中的表,對於我們的例子來說,使用預設的“約定勝於配置”方式,這意味著 Products 屬性對應到資料庫中的 Products 表,Categories 映射到資料庫中的 Categories 表。在博文的後面,我還將討論如何?自訂的映射。
你可以將這個類加入到解決方案的任何位置,例如,可以放置在 \Models 檔案夾中,或者放在一個獨立的類庫項目中,可能你需要在代碼的前面增加對於命名空間 System.Data.Entity 的引用。DbContext 和 DbSet 定義在其中。
Step 4: 搭建 Categories 控制器的腳手架
我們已經建立了從資料庫擷取或者儲存資料的所有內容。現在,我們建立一個 ASP.NET MVC 的控制器來實現對於分類資料的建立/編輯/刪除/更新,從前的時候,你不得不手動寫一個控制器來完成這些功能,包括你自己實現通過 EF Code First 訪問資料代碼,現在,ASP.NET MVC3 工具更新現在包括內建的腳手架支援協助你自動完成這些工作。
搭建一個新的 Categories 控制器類,我們在 /Controllers 檔案夾上右鍵,然後選擇 增加 Add -> 控制器 Controller 操作功能表。
然後,彈出增加控制器 Add Controller 的對話方塊,我們對建立的控制器命名為 CategoriesController,現在的對話方塊支援一個新的 腳手架節,允許我們使用內建的模板來搭建控制器。
我們選擇 Controller With read/Write action and views, using Entity Framework 模板,這將使建立的控制器包括完整的 EF 增、刪、改、查 代碼。
在選擇這個模板之後,我們選擇控制器使用的模型類,來實現 CRUD 支援,這裡是 Dategory 類,我們也選擇 EF DbContext/ObjectContext 類來訪問資料庫,在這裡,使用我們前面定義的 StoreContext 類。
當我們點擊 Add 按鈕的時候,Visual Studio 將會自動建立一個 CategoriesController 類,包括實現了Create、Edit、Details、Delete 和 Index Action 方法, 還有每一個 Action 相關的視圖模板。
如果開啟 CategoriesController.cs ,將會發現 Action 方法中已經實現了通過 EF 的資料訪問支援。
我們已經實現了訪問 Categories 資料的所有代碼。
Step 5: 設定資料庫的位置
在運行之前,我們的最後一步我們使用的資料庫位置。EF Code First 允許使用現有的資料庫,也允許使用目前還不存在的資料庫,可以通過模型類來自動建立它。
沒有串連串的情況
預設情況下,你甚至不需要配置串連串來指明資料庫。如果沒有指明,EF Code First 將在 SQL Express 中建立一個與你的 DbContext 同名的資料庫,例如,我們現在將會在本地的 .\SQLExpress 中建立一個名為 ScaffoldingDemo.Models.StoreContes 的資料庫。
通過串連串顯式制定
你還可以在 web.config 中增加一個串連串的配置來顯式指定,串連串的名字需要匹配 DbContext 類的名字,例如,在我們的應用中,DbContext 的名字是 StoreContext,預設情況下,EF 將會尋找同名的串連串來決定資料庫的位置。
下面是我們使用儲存在 App_Data 檔案夾中名為 Store.sdf 的嵌入的 SQL CE 資料庫配置。
<configuration>
<connectionStrings>
<add name="StoreContext"
connectionString="Data Source=|DataDirectory|\Store.sdf"
providerName="System.Data.SqlServerCe.4.0" />
</connectionStrings>
</configuration>Step 6: 運行應用
好啦!現在我們運行這個應用,導航到 /Categories ,這將會執行 CategoriesController 的 Index 方法,列出資料庫中所有的分類,當前還沒有分類。
點擊 Create New 連結來建立一個新的分類,這會導航到 /Categories/Create ,這個 Action 提供了一個建立新分類的表單。
點擊 Create 將會 Post 到 CategoriesController ,添加新的分類到資料庫中,重複這個操作,我們可以建立多個不同的分類。
非常酷的一點在於,我們不需要寫任何的控制器或者視圖就可以完成!
腳手架自動產生了需要的代碼,這提供了一個簡單的起點,我們可以繼續調整它來定製更多的功能。
Step 7: 關注資料庫
我們現在配置程式使用嵌入式的資料庫 SQL CE,當運行程式的時候,如果資料庫還不存在,那麼 EF 4.1 將會檢測到這一點,然後自動建立它,基於我們前面定義的 Product 和 Category 類。
要想在解決方案中看到資料庫,在解決方案管理器的上面點擊重新整理按鈕,然後,EF 自動建立的 Store.sdf 將會出現在 App_Data 檔案夾下。
你可以通過雙擊這個資料庫,在伺服器總管中開啟它,然後展開 Tables ,就可以看到剛剛建立的表。
注意 EF 建立的表基於 Product 和 Category 類,還根據類中屬性的定義,自動建立了主鍵和兩表之間的關聯。
Step 8: 搭建 Product 控制器的腳手架
我們已經建立了 CategoriesController 來管理分類,下面我們建立 ProductsController 來管理產品。
就向前面一樣,我們在 \Controller 檔案夾上右鍵,選擇 Add -> Controller 來建立 ProductsController,我們使用 EF 模板和 Product 模型類。
點擊 Add 按鈕之後,ProductsController 已經搭建完成,包括 CRUD 方法和相應的視圖。
我們可以運行一下,導航到 /Products。
點擊 Create New 來建立產品
很酷的是分類是一個下拉式清單,而不是一個填寫外鍵的文字框。
在 Visual Studio 中支援的腳手架很聰明地檢測到關聯的分類,EF 代碼自動關聯正確的分類。
在建立一些產品之後,訪問 /Products 顯示的效果如下。
注意分類資訊是使用友好的名稱顯示出來,而不是一個外索引值。