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

        

  • 相关阅读:
    php 接收表单 方法的区别
    php上传图片---初级版
    php 验证格式的函数总结
    行为类模式分析
    深入理解java虚拟机
    JVM生产环境参数实例及分析
    redis 排序(转)
    八种常用的排序算法(转)
    CAS原理分析
    Redis使用总结之与Memcached异同(转)
  • 原文地址:https://www.cnblogs.com/mane/p/3396172.html
Copyright © 2020-2023  润新知