MVC中使用Entity Framework 基於方法的查詢學習筆記 (一)

     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教程。

相關文章
相關標籤/搜索