MVC中使用Entity Framework 基于方法的查询学习笔记 (一)

     EF中基于方法的查询方式不同于LINQ和以往的ADO.NET,正因为如此,有必要深入学习一下啦。闲话不多说,现在开始一个MVC项目,在项目中临床学习。

创建MVC项目

1.“文件”--“新建项目”--“模板”--“Web”--“ASP.NET MVC4应用程序”,创建一个项目名称为 GuestBook 的MVC4项目

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.创建一个数据上下文类

MVCGuestBookContext.cs:

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.创建一个控制器

HomeController.cs:

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

    

你可能感兴趣的:(framework)