EF中基於方法的查詢方式不一樣於LINQ和以往的ADO.NET,正由於如此,有必要深刻學習一下啦。閒話很少說,如今開始一個MVC項目,在項目中臨牀學習。css
建立MVC項目html
1.「文件」--「新建項目」--「模板」--「Web」--「ASP.NET MVC4應用程序」,建立一個項目名稱爲 GuestBook 的MVC4項目jquery
2.在文件目錄的中Models目錄中新建兩個Model類數據庫
Book.cs:佈局
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.ComponentModel; using System.ComponentModel.DataAnnotations; namespace GuestBook.Models { [DisplayName("留言板")] public class Book { [Key] public int Id { get; set; } [DisplayName("正文")] [Required(ErrorMessage = "你須要輸入一點內容哦")] [MaxLength(250, ErrorMessage = "做者不能超過250個字符")] public string Body { get; set; } [DisplayName("日期")] [Required] public DateTime PublishOn { get; set; } [Required] public virtual User User { get; set; } } }
User.cs:學習
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.ComponentModel; using System.ComponentModel.DataAnnotations; namespace GuestBook.Models { [DisplayName("用戶")] [DisplayColumn("Name")] public class User { [Key] public int Id { get; set; } [DisplayName("用戶名")] [Required(ErrorMessage = "請輸入經常使用Email地址")] [Description("咱們將使用該Email地址做爲你的登陸賬號")] [MaxLength(250, ErrorMessage = "標題不能超過250個字符")] [DataType(DataType.EmailAddress)] public string Email { get; set; } [DisplayName("密碼")] [Required(ErrorMessage = "必須輸入一個密碼")] [Description("請輸入你的登陸密碼")] [MaxLength(40, ErrorMessage = "密碼不能超過40個字符")] [DataType(DataType.Password)] public string PassWord { get; set; } [DisplayName("姓名")] [Required(ErrorMessage = "請輸入你的真實姓名")] [Description("請輸入你的真實姓名,讓更多人瞭解你")] [MaxLength(10, ErrorMessage = "做者姓名不能超過10個字符")] public string Name { get; set; } [DisplayName("身份證")] [Required(ErrorMessage = "必須輸入身份證號碼")] [Description("身份證是你找到密碼的惟一依據")] [MaxLength(18, ErrorMessage = "身份證不能超過18個字符")] [DataType(DataType.Password)] public string PeopleID { get; set; } [DisplayName("註冊日期")] [Required] public DateTime RegisterOn { get; set; } public virtual ICollection<Book> Books { get; set; } } }
3.建立一個數據上下文類ui
MVCGuestBookContext.cs:spa
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data.Entity;// namespace GuestBook.Models { public class MVCGuestBookContext : DbContext { public MVCGuestBookContext() : base("name=DefaultConnection") { } public DbSet<User> Users { get; set; } public DbSet<Book> Books { get; set; } } }
4.建立一個控制器code
HomeController.cs:htm
using System; using System.Collections.Generic; using System.Data; using System.Data.Entity; using System.Linq; using System.Web; using System.Web.Mvc; using GuestBook.Models; namespace GuestBook.Controllers { public class HomeController : Controller { private MVCGuestBookContext db = new MVCGuestBookContext(); public ActionResult Index() { var data = db.Books.ToList(); return View(data); } } }
5.右鍵 Index 這個動做(Action) 右鍵菜單點擊 「添加視圖」 在彈出的對話框中 「視圖引擎」 選擇 Razor, 「模型類」 選擇剛纔建立的Book,「支架模板」 選擇List,而後建立一個視圖(view),
展開目錄的Views中能夠看到一個基於Home控制器建立的文件夾Home,在文件夾下能夠看到一個 Index.cshtml 文件,該文件定義以下:
@model IEnumerable<GuestBook.Models.Book> @{ ViewBag.Title = "Index"; } <h2>Index</h2> <p> @Html.ActionLink("Create New", "Create") </p> <table> <tr> <th> @Html.DisplayNameFor(model => model.Body) </th> <th> @Html.DisplayNameFor(model => model.PublishOn) </th> <th></th> </tr> @foreach (var item in Model) { <tr> <td> @Html.DisplayFor(modelItem => item.Body) </td> <td> @Html.DisplayFor(modelItem => item.PublishOn) </td> <td> @Html.ActionLink("Edit", "Edit", new { id=item.Id }) | @Html.ActionLink("Details", "Details", new { id=item.Id }) | @Html.ActionLink("Delete", "Delete", new { id=item.Id }) </td> </tr> } </table>
該文件詳細語法會在之後章節中介紹,能夠看出該文件彷佛不是一個標準的Html文件。這是由於咱們剛纔在建立視圖時勾選了 「使用佈局或母版頁」 而使用了默認的母版機制。
在MVC中使用了相似母版頁的機制,咱們打開 _ViewStart.cshtml 文件能夠看到以下定義:
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
這個定義指向了一個默認的母版,而且在MVC中,在沒有單獨指明使用那個母版的時候默認都會使用這個母版頁,咱們打開這個母版頁面 ~/Views/Shared/_Layout.cshtml
,能夠看到所有的HTML母板代碼以下:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width" /> <title>@ViewBag.Title</title> @Styles.Render("~/Content/css") @Scripts.Render("~/bundles/modernizr") </head> <body> @RenderBody() @Scripts.Render("~/bundles/jquery") @RenderSection("scripts", required: false) </body> </html>
在這個母板頁中,使用了填入方式定義了一些相似@RenderBody() 的方法,用於填入內容頁,咱們能夠像以往同樣修改成咱們想要的方式,接着,咱們運行程序,默認的咱們已經能夠看到系統爲咱們建立的標準列表頁面。
題外話:也許,你會對所產生的網址有迷惑,可是,當你熟悉了MVC的網址路由,這個就明白了,固然,這些不是我講的重點,重點內容將在下節呈現。還有就是,以上這種構建程序的方式使用的是Entity Framework 的CodeFirst 開發方式,在運行成功後會自動生成數據庫,更多細節內容,請閱讀MVC教程。