Tip#4 -创建一个自定的数据库基础控制器(Controller)类

 该篇文章是Encosia博客中的文章,个人觉得不错就翻译了一下。但由于个人英语水平有限,还望各位海量。如果想看原文,请点击ASP.NET MVC Tip #4 - Create a Custom Data Controller Base Class  查看原文。

   

     在这个条目中,我会学会怎样创建一个自定义的基础控制器类,该控制器暴露的操作用于执行数据共同的像显示、插入、更新和删除数据的操作。

     每次你写代码发现你一遍又一遍的写同样类型的代码,那是一段非常好的时光停下来,考虑是否你已经浪费了很多的时间。昨天,我发现当我在编写一个基于数据库驱动的Asp.net MVC页面程序时我就在这样的状态下。我需要为程序中的每个数据表执行相同的标准的数据库操作-显示数据、更新数据、插入数据、删除数据。要求一次又一次写一样的代码的糟糕景象启发我在今天写这篇Asp.net MVC条目。

     MVC控制器就是一个类(不管是VB还是C#).类支持继承,因此,如果你发现你在为你的控制器操作写一样的逻辑,那么比较明智的是你写一个新的包含相同操作的基础类。记住你能够为其他的形同类型的控制器操作创建基础的控制器类。

我创建了一个命名为DataController的控制器基础类。这个类提供如下公共方法: 

  • Index() – 显示一个数据表的记录
  • Details() – 显示数据表中的一条数据记录
  • Edit() – 显示一个编辑已存在数据的View
  • Update() – 更新数据库中的数据记录
  • New() – 显示插入一条新的数据记录的View
  • Insert() – 向数据库中插入一条数据
  • Delete() – 删除已存在的数据

     因为这些方法中的每个都是公共的,所以每个方法都可以被暴露为一个操作。你可以在你的浏览器地址栏中通过正确的Url调用这些方法。

 

DataController类也提供了几个protected的方法: 

  • DBSave() – 插入或者更新一个数据库记录
  • DBInsert() – 插入一个新的数据库记录
  • DBUpdate() – 更新一个记录
  • DBDelete() – 删除一个已存在的记录
  • DBGet() – 获取一个数据库记录

     

         因为这些方法是受保护的,所以他们不能通过Url调用。但你可以在你的继承类中调用这些方法中任何一个。这些是可以在继承的控制器操作的方法调用的有用的公共方法。

    最后,DataController类提供如下属性: 

    • DataContext – LINQ to SQL的数据内容.
    • Table – LINQ to SQL数据表.
    • IdentityColumnName – 表的主键名称.

         这些属性是受保护的,你可以在继承他的控制器类中使用他们,但是他们不作为控制器操作暴露。

    DataController·类是一个通常的类。当你创建一个继承与他的控制器,你必须指定DataController类呈现的数据实体(database entity)。DataController类实在Linq to SQL下工作的。在使用DataController类前,你必须先创建你的呈现数据对象的Linq to SQL实体。

         例如,列表1包含了一个继承DataController类的HomeControlller类。注意传递给DataController类的Movie类型。Movie类是一个用Visual Studio对象关系工具创建的Linq to SQL实体。

     

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Web;
     5 using System.Web.Mvc;
     6 using Tip4.Models;
     7 
     8 namespace Tip4.Controllers
     9 {
    10     public class HomeController : DataController<Movie>
    11     {
    12         /// <summary>
    13         /// Show Movies in a Category
    14         /// </summary>
    15         public ActionResult Category(int Id)
    16         {
    17             var results = from m in this.Table where m.CategoryId == Id select m;
    18             return View(results);
    19         }
    20     }
    21 }

     

         因为HomeControlller类继承于DataController类,HomeControlller类自动的暴露了Index()、Details()、Create()、New()、Edit()、Update()和Delete()操作。因为Movie实体传递给DataController,HomeControlller能够使你不用Movies数据表而执行操作。

         在你使用DataController类前,你必须在你程序的Web.config文件中添加一个名为dataController的数据库连接字符串。你可以拷贝由VS工具创建的数据连接字符串并将它重命名为dataController。

    为了使用DataController类你还必须要创建一套views。要创建的views如下:

     

  • Index.aspx
  • Details.aspx
  • Create.aspx
  • Edit.aspx

     

         在明天的条目中,我会给大家展示怎样以贡献View的形式(share views)一次性的为所有的控制器创建这些veiws。但是,这是明天的条目。 

         我的期望和希望是在Asp.net MVC框架正式版本出来前会有成千上万个自定义的基础类被开发者积极的使用。我能设想基础控制类在不同的方案下使用。权限、购物车、产品目录等等。

     

    下载源代码

  • posted on 2008-08-20 18:38  Xuemin_Zhang  阅读(287)  评论(0编辑  收藏  举报