ASP.NET MVC 3 与 Entity Framework Code First 入门教程

在互联网上已经有很多关于ASP.NET MVC和Entity Framework的文章,但对初学者来说,整合这些资源可能会感到困难。因此,将尝试发布一系列逐步教程。现在,让从介绍开始。

推荐先决条件

为了开始本教程,需要以下工具:

  • Visual Studio 2010 SP1
  • SQL Express
  • ASP.NET MVC 3(如果已经正确安装了Visual Studio 2010 SP1,那么它已经包含在内,否则可以在这里找到它)

介绍

Microsoft的ADO.NETEntity Framework(EF) 简化了数据访问,避免了在代码中直接与数据库工作。Entity Framework处理所有的数据库交互。不需要编写额外的代码来处理实体之间的任何连接,因为它在内存中与对象一起工作。

Visual Studio 2010提供了更丰富的EF设计和工具支持。VS 2010中的EF设计器支持“数据库优先”开发风格——可以根据现有数据库在设计表面构建模型层,以及“模型优先”开发风格——首先使用设计表面定义模型层,然后使用它来生成数据库架构。

Code First 开发

EF4还提供了一个更以代码为中心的选项,称之为“Code First开发”。使用Code First开发时,将首先编写定义概念(域)模型的.NET类。然后可以使用模型来生成数据库架构,或者将其映射到现有数据库。

因为首先做的是编写代码来描述实体,可以简单地定义类,让EF与这些类一起工作,这就是所谓的“Code First开发”。

Code First具有以下优点:

  • 无需打开设计器或定义XML映射文件即可进行开发
  • 通过编写“普通旧类”来定义模型对象,无需任何基类
  • 使用“约定优于配置”的方法,无需显式配置即可实现数据库持久性
  • 可选择性地覆盖基于约定的持久性,并使用Fluent代码API完全自定义持久性映射

MVC(模型视图控制器)基础

模型(Model):

  • 业务逻辑
  • 可以使用以下任何一种:
  • LINQ to SQL
  • Entity Framework
  • nHibernate
  • 等等...

视图(View):

  • 没有业务逻辑,只有显示逻辑
  • JavaScript-jQuery用于客户端验证

控制器(Controller):

  • 包含动作
  • 作为请求网关
  • 决策者(决定需要哪些数据,渲染哪个模型,以及渲染哪个视图)

如果查看上面的图像,会发现有“Models”、“Views”和“Controllers”文件夹。稍后会详细讨论它们。现在,只是一个简单的介绍。

创建一个MVC 3应用程序

在Visual Studio 2010中,转到文件->新建->项目。

在Visual C#->Web部分,将看到一个选项来创建一个'ASP.NET MVC3'应用程序,选择它,设置其他偏好(项目名称,项目目录),然后点击确定。

记住,不要选择'文件->新建->网站'选项。

在下一个ASP.NET MVC3项目向导中,选择“Internet应用程序”,并将“Razor”作为视图引擎。

Visual Studio会自动为创建一个完整的项目结构,包括包含预构建控制器类的文件夹,模型,视图,以及“Scripts”、“Content”用于jQuery、JavaScript和CSS文件。

如果现在运行项目,将找到它的默认内容,这只是一个欢迎来到MVC的消息和一个带有主页/关于/登录/注册页面的基本布局。

可以更改欢迎消息。如果打开"Views/Home/Index.cshtml"(Razor视图),将得到

@ViewBag.Message

。因为@ViewBag引用了一个动态类型集合,可以在其中分配任何类型的元素。如果打开"Controllers/HomeController.cs",将找到:

public ActionResult Index() { ViewBag.Message = "Welcome to ASP.NET MVC!"; return View(); }

将"Welcome to ASP.NET MVC!"替换为"Hello World!"分配给ViewBag.Message。

Entity FrameworkCode First

不需要通过创建数据库或指定架构来开始应用程序。可以从编写定义域模型对象的类开始,这对应用程序来说是最恰当的——无需混合数据持久性逻辑。

创建一个模型类,例如"Author",它将创建一个空类。

编写以下代码:

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.ComponentModel.DataAnnotations; namespace OpenLibrary.Models { public class Author { public int AuthorId { get; set; } [Required] public string Name { get; set; } public string Address1 { get; set; } public string Email { get; set; } public string Phone { get; set; } public DateTime DOB { get; set; } public virtual ICollection Books { get; set; } } public class Book { public int BookId { get; set; } public string Name { get; set; } public DateTime PublishDate { get; set; } public int AuthorId { get; set; } public virtual Author Author { get; set; } } }

这只是代码。不是从数据库派生的。注意已经在这个类上放置了[Required]注释。Required注释告诉EF一个特定的属性是必需的。将Required添加到Name属性将迫使EF和MVC确保该属性中已经有数据。

稍后将讨论Code FirstDataAnnotations。

接下来,通过右键|点击添加控制器来创建一个Author控制器:

  • 定义控制器名称
  • 模板[使用Entity Framework的控制器,具有读写操作和视图]
  • 模型类[Author(OpenLibrary.Models)]
  • 数据上下文类[点击新的数据上下文,另一个模态窗口将出现,点击确定然后添加]

接下来,通过右键|点击添加控制器来创建一个Book控制器:

  • 定义控制器名称
  • 模板[使用Entity Framework的控制器,具有读写操作和视图]
  • 模型类[Book(OpenLibrary.Models)]
  • 数据上下文类[使用相同的数据上下文然后点击添加]

查看解决方案资源管理器,将找到自动生成的代码。上下文类持有EF的Authors和Books。可以从控制器访问这个类和所有生成的类。也可以访问所有自动生成的创建、删除、详情、编辑和索引视图在Razor中。如果打开控制器,将找到这些方法。所以已经从创建的模型中得到了自动生成的视图和控件。

接下来打开Models/OpenLibraryContext.cs,将找到DBContext和DBSet。

当运行应用程序时,DBContext会检查是否有任何模型用于派生的上下文类型,以及任何已经缓存在应用程序域中的连接字符串。如果已经有了,那么它就使用那个模型,或者DBContext会根据定义的DbSet属性确定要包含在模型中的类。

然后它使用默认的Code First约定和通过注释或Fluent API指定的额外配置来构建模型。System.Data.Entity.DbSet属性在创建派生的DbContext类的实例时自动初始化。

现在运行项目并享受CRUD:在URL区域写入Author,将找到一个空的作者列表页面。点击创建新并填写数据并保存。也可以编辑、删除,还可以浏览每个作者的详细信息。在URL区域写入Book并点击创建新。将在Book/Create页面上找到一个作者下拉菜单。选择并保存书籍详细信息。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485