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(, 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(, ErrorMessage = "标题不能超过250个字符")]
[DataType(DataType.EmailAddress)]
public string Email { get; set; } [DisplayName("密码")]
[Required(ErrorMessage = "必须输入一个密码")]
[Description("请输入你的登录密码")]
[MaxLength(, ErrorMessage = "密码不能超过40个字符")]
[DataType(DataType.Password)]
public string PassWord { get; set; } [DisplayName("姓名")]
[Required(ErrorMessage = "请输入你的真实姓名")]
[Description("请输入你的真实姓名,让更多人了解你")]
[MaxLength(, ErrorMessage = "作者姓名不能超过10个字符")]
public string Name { get; set; } [DisplayName("身份证")]
[Required(ErrorMessage = "必须输入身份证号码")]
[Description("身份证是你找到密码的唯一依据")]
[MaxLength(, 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教程。

MVC中使用Entity Framework 基于方法的查询学习笔记 (一)的更多相关文章

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

    解释,不解释: 紧接上文,我们在Visual Studio2012中看到系统为我们自动创建的视图(View)文件Index.cshtml中,开头有如下这句话: @model IEnumerable&l ...

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

    紧接上文,我们已经学习了MVC数据上下文中两个常用的类,这两个类承载着利用函数方式进行数据查询的全部内容,我们既然已经了解了DbSet<TEntity> 是一个泛型集合,并且实现了一些接口 ...

  3. Entity Framework 基于方法的查询语法

      实体框架(Entity Framework )是 ADO.NET 中的一套支持开发面向数据的软件应用程序的技术. LINQ to Entities 提供语言集成查询 (LINQ) 支持,它允许开发 ...

  4. asp.net MVC中使用entity framework出现从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值”的处理

    方法一: 使用DateTime类型的字段在作为参数传入到数据库前记得赋值,并日期要大于1753年1月1日. 方法二: 将DateTime类型的字段修改为DateTime?类型,由于可空类型的默认值都是 ...

  5. 在MVC中使用dotless后台动态解析LESSCSS的学习笔记

    通过学习LessCSS,我们知道,Less是需要通过编译才能生成 .css 文件,主要使用三种方式进行编译: 1)使用第三方编译工具,在项目发布前编译好放在项目中. 2)在浏览器端解析执行,需要引用  ...

  6. MVC中使用EF(1):为ASP.NET MVC程序创建Entity Framework数据模型

    为ASP.NET MVC程序创建Entity Framework数据模型 (1 of 10) By  Tom Dykstra |July 30, 2013 Translated by litdwg   ...

  7. 在Oracle中使用Entity Framework 6 CodeFirst

    项目中需要将系统从SQLServer数据库迁移到Oracle上.由于原大部分数据访问操作都是通过包装了Entity Framework的统一访问入口实现的,所以需要研究Entity Framework ...

  8. Asp.Net MVC 模型(使用Entity Framework创建模型类) - Part.1

    这篇教程的目的是解释在创建ASP.NET MVC应用程序时,如何使用Microsoft Entity Framework来创建数据访问类.这篇教程假设你事先对Microsoft Entity Fram ...

  9. 源码学习之ASP.NET MVC Application Using Entity Framework

    源码学习的重要性,再一次让人信服. ASP.NET MVC Application Using Entity Framework Code First 做MVC已经有段时间了,但看了一些CodePle ...

随机推荐

  1. 如何用Azure Web App Services接入微信公众号

    注:本文提到的代码示例下载地址>如何用Azure Web App Services接入微信公众号 如何用Azure Web App Services接入微信公众号 简介 此示例演示如何创建Azu ...

  2. chpasswd-批量修改用户密码

    批量修改用户密码 工作原理: 从系统的标准输入读入用户的名称和口令,并利用这些信息来更新系统上已存在的用户的口令 语法: :# echo 用户名:密码 | chpasswd :# chpasswd & ...

  3. 让Visual Studio 2013为你自动生成XML反序列化的类

    Visual Sutdio 2013增加了许多新功能,其中很多都直接提高了对代码编辑的便利性.如: 1. 在代码编辑界面的右侧滚动条上显示不同颜色的标签,让开发人员可以对所编辑文档的修改.查找.定位情 ...

  4. form 表单基础知识

    <form method=" name="one" action="http://www.battlenet.com.cn/zh/"> & ...

  5. SVO原理解析

    最近空闲时间在研究Semi-Direct Monocular Visual Odometry(SVO)[1,2],觉得它值得写一写.另外,SVO的运算量相对较小,我想在手机上尝试实现它. 关于SVO的 ...

  6. 现在有哪些浏览器的哪些版本支持 HTML5

    现在有哪些浏览器的哪些版本支持 HTML5 1.IE IE9支持部分 IE10+支持2.Firefox Firefox3.5,3.6支持大部分 Firefox4.0+支持3.Chrome Chrome ...

  7. lightbox使用

    使用方法: 1.在页面头部包含 lightbox.js 文件并加载 lightbox.css 样式表文件 <script type="text/javascript" src ...

  8. 最小生成树---Prim算法和Kruskal算法

    Prim算法 1.概览 普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (gra ...

  9. Java开发环境搭建——Tomcat配置

    指定tomcat的JDK版本可能由于种种原因,系统的JAVA_HOME配置的JDK版本并不是当前需要的版本,而tomcat默认使用的是JAVA_HOME的JDK.可以通过修改tomcat/bin/ca ...

  10. 二、基于hadoop的nginx访问日志分析---计算日pv

    代码: # pv_day.py#!/usr/bin/env python # coding=utf-8 from mrjob.job import MRJob from nginx_accesslog ...