[翻译]ASP.NET MVC 3 开发的20个秘诀(二)[20 Recipes for Programming MVC 3]:自动生成控制器和视图
议题
通过您的网站管理动态内容。
解决方案
使用实体框架与数据库绑定,通过Controller以及自动生成的多个视图界面,允许用户创建、读取、更新以及删除(也称为:CRUD)数据。
讨论
在定义控制器和视图之前,需要预先创建模型和DbContext以及数据收集规则(代码优先方法)。在接下来的例子中,将会创建两个类,并实现一个图书列表管理的功能。第一个类包含书籍信息在SQL Express数据库中存储的数据定义。第二个类将是一个包含Book类型的DbSet对象的DbContext类。创建模型,右键单击Models文件夹,并选择添加 -> 类。在类的文件名写:Book.cs,用下面的代码替换生成的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
namespace MvcApplication4.Models
{
public class Book
{
public int ID { get; set; }
public string Title { get; set; }
public string Isbn { get; set; }
public string Summary { get; set; }
public string Author { get; set; }
public string Thumbnail { get; set; }
public double Price { get; set; }
public DateTime Published { get; set; }
}
public class BookDBContext : DbContext
{
public DbSet<Book> Books { get; set; }
}
}
*译者注:保存Book.cs后,必须编译整个项目(快捷键Ctrl+Shift+B)才能继续下面的操作。
创建Book的模型和BookDBContext类,接下来就可以开始完成控制器和视图了。开始,右键单击Controller文件夹,选择“添加控制器”(如图 1-1)。
图例 1-1,创建新的控制器
如图所示,将新建控制器命名为BooksControllers。在模板选项卡中选择“包含读/写操作和视图的控制器(使用 Entity Framework)”。模型类选择Book类,数据上下文类选择之前创建的BookDBContext类。视图选项中的Razor(CSHTML)是默认选项,所以保持不变。内容输入完毕以后点击“新增”,创建文件。(如图1-2)
图例 1-2,新建文件
Entity Framework可以根据已存在的数据库为控制器创建不同的操作方法和视图。在大型项目中,这些基础内容是分开制作的。比如,一个好的前端Web开发人员可能并不是数据库设计方面的专家。因此,数据库设计需要有专业人员负责。
在接下来的例子中,将会连接先前创建的数据库,并为“Book“表创建相应的实例模型。选择使用旧的应用程序还是创建新的应用程序,这取决于您选择代码优先还是数据库优先。
程序创建后,右键单击Models文件夹,并选择“添加”->“新建项”。在右上角搜索框中键入”实体“,从搜索结果中选择”ADO.NET实体数据模型“。将文件名改为”BookModel.edmx“。现在可以通过向导建立数据库连接:
- 选择“从数据库生成”;
- 点击“新建连接”按钮;
- 在列表中选择Microsoft SQL Server,并点击“继续”;、
- 在连接属性对话框的服务器名称中选择你的SQL Express数据库;
- 连接后在数据库的下拉框中选择由MVC自动创建的数据库中最后一个表,然后点击“确定”。
* 译者注:请在步骤3的服务器名中输入.\SQLEXPRESS,步骤4中选择的应该是tempdb数据库,不知道是否在之前有前提我没有看到,当然下面所说的“Book”表也是不存在的,但是这个章节的操作有些是行不通的。
点击下一步更新Web.Config中的SQLExpress连接字符串。现在在数据库选择对话框中展开表节点并选择“Book”表。
点击“完成”之后,将会在Models目录下创建新的实体图。在创建控制器之前必须先对解决方案进行编译。项目构建完成,就像先前“代码优先”的例子中做得那样,右键单击控制器文件夹,选择“添加”->”控制器”。
使用这种方法创建的控制器,依然会有“Book”模型类,数据上下文类以及以及包含数据库连接的实体实例。
在未来的秘诀中我们将使用代码优先的方法,手工操作数据库中的表,让更多的注意力集中到MVC本身。
参考信息