議題
通過您的網站管理動態內容。
解決方案
使用Entity Framework與資料庫綁定,通過Controller以及自動產生的多個視圖介面,允許使用者建立、讀取、更新以及刪除(也稱為:CRUD)資料。
討論
在定義控制器和視圖之前,需要預先建立模型和DbContext以及資料收集規則(代碼優先方法)。在接下來的例子中,將會建立兩個類,並實現一個圖書列表管理的功能。第一個類包含書籍資訊在SQL Express資料庫中儲存的資料定義。第二個類將是一個包含Book類型的DbSet對象的DbContext類。建立模型,按右鍵Models檔案夾,並選擇添加 -> 類。在類的檔案名稱寫:Book.cs,用下面的代碼替換產生的程式碼:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
namespace MvcApplication4.Models
{
public class Book
{
public int ID { get; set; }
public string Title { get; set; }
public string Isbn { get; set; }
public string Summary { get; set; }
public string Author { get; set; }
public string Thumbnail { get; set; }
public double Price { get; set; }
public DateTime Published { get; set; }
}
public class BookDBContext : DbContext
{
public DbSet<Book> Books { get; set; }
}
}
*譯者註:儲存Book.cs後,必須編譯整個項目(快速鍵Ctrl+Shift+B)才能繼續下面的操作。
建立Book的模型和BookDBContext類,接下來就可以開始完成控制器和視圖了。開始,按右鍵Controller檔案夾,選擇“添加控制器”( 1-1)。
圖例 1-1,建立新的控制器
,將建立控制器命名為BooksControllers。在模板選項卡中選擇“包含讀/寫操作和視圖的控制器(使用 Entity Framework)”。模型類選擇Book類,資料內容類選擇之前建立的BookDBContext類。視圖選項中的Razor(CSHTML)是預設選項,所以保持不變。內容輸入完畢以後點擊“新增”,建立檔案。(1-2)
圖例 1-2,建立檔案
Entity Framework可以根據已存在的資料庫為控制器建立不同的操作方法和視圖。在大型項目中,這些基礎內容是分開製作的。比如,一個好的前端Web開發人員可能並不是資料庫設計方面的專家。因此,資料庫設計需要有專業人員負責。
在接下來的例子中,將會串連先前建立的資料庫,並為“Book“表建立相應的執行個體模型。選擇使用舊的應用程式還是建立新的應用程式,這取決於您選擇代碼優先還是資料庫優先。
程式建立後,按右鍵Models檔案夾,並選擇“添加”->“建立項”。在右上方搜尋方塊中鍵入”實體“,從搜尋結果中選擇”ADO.NET實體資料模型“。將檔案名稱改為”BookModel.edmx“。現在可以通過嚮導建立資料庫連接:
- 選擇“從資料庫產生”;
- 點擊“建立串連”按鈕;
- 在列表中選擇Microsoft SQL Server,並點擊“繼續”;、
- 在串連屬性對話方塊的伺服器名稱中選擇你的SQL Express資料庫;
- 串連後在資料庫的下拉框中選擇由MVC自動建立的資料庫中最後一個表,然後點擊“確定”。
* 譯者註:請在步驟3的伺服器名中輸入.\SQLEXPRESS,步驟4中選擇的應該是tempdb資料庫,不知道是否在之前有前提我沒有看到,當然下面所說的“Book”表也是不存在的,但是這個章節的操作有些是行不通的。
點擊下一步更新Web.Config中的SQLExpress連接字串。現在在資料庫選擇對話方塊中展開表節點並選擇“Book”表。
點擊“完成”之後,將會在Models目錄下建立新的實體圖。在建立控制器之前必須先對解決方案進行編譯。項目構建完成,就像先前“代碼優先”的例子中做得那樣,按右鍵控制器檔案夾,選擇“添加”->”控制器”。
使用這種方法建立的控制器,依然會有“Book”模型類,資料內容類以及以及包含資料庫連接的實體執行個體。
在未來的秘訣中我們將使用代碼優先的方法,手工操作資料庫中的表,讓更多的注意力集中到MVC本身。
參考資訊
ADO.NET Entity Framework Overview 原書地址 書籍原始碼