熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

創建自定義數據控制器基類

2013-11-13 10:20:35  來源: .NET編程 

  摘要在這個Tip中你將學到如何創建一個自定義控制器基類讓它能夠為常見的數據庫操作暴露一系列acton如顯示插入更新和刪除數據

  無論什麼時候你在寫代碼時都會發現其實你在一遍又一遍地編寫著同樣類型的代碼現在是時候停下來考慮一下你是否正在浪費者大量的時間昨天我發現在創建一個數據庫驅動的ASPNET MVC應用程序時我的確處在這樣一種情形中我不得不為應用程序中的每一個數據庫表進行標准的操作——顯示數據更新數據插入數據刪除數據一遍又一遍地編寫完全相同的代碼這種可怕的現象賦予我靈感讓我寫下了今天這篇ASPNET MVC Tip

  MVC控制器就是一個類(Visual Basic或C#類)既然是類就可以支持繼承因此如果你發現你正在為控制器action編寫重復的代碼就有必要編寫一個新的基類了讓它包含一組常見的action在這個Tip中我們一起來創建一個數據控制器基類它能夠執行標准的數據庫操作要記住你也可以為其他類型的常見控制器action編寫基類

  我建立了一個名為DataController的控制器基類該類提供了下列公共方法

  Index()——顯示一個數據表中所有的數據記錄

  Details()——顯示數據庫表中的一條數據記錄

  Edit()——顯示一個視圖其中包含一個用於編輯現有數據記錄的窗體

  Update()——更新數據庫中的數據記錄

  New()——顯示一個視圖用於插入新的數據庫記錄

  Insert()——向數據庫中插入一條新的數據記錄

  Delete()——從數據庫中刪除一條現有記錄

  由於這些方法都是公共的所以每個方法都會暴露為一個action你只要在Web浏覽器地址欄中輸入正確的URL就能調用這些方法

  DataController還包含一些受保護的方法

  DBSave()——插入或更新數據庫記錄

  DBInsert()——插入新的數據庫記錄

  DBUpdate()——更新現有的數據庫記錄

  DBDelete()——刪除現有的數據庫記錄

  DBGet()——獲取單獨一條數據庫記錄

  由於這些方法是受保護的所以他們不能通過URL調用然而你可以在派生類中調用這些方法這些都是有用的工具方法你可以通過調用這些方法來實現派生類的控制器action方法

  最後DataController類還提供了下列方法

  DataContext——LINQ to SQL數據上下文

  Table——LINQ to SQL表

  IdentityColumnName——數據表中包含的標識列

  這些屬性也是受保護的你可以在派生類中使用它們但他們不會被暴露為控制器action

  DataController類是一個泛型類當你從DataController類繼承一個控制器時必需指定數據實體的類型DataController類與LINQ to SQL一起工作在使用DataCotroller類之前必須先創建表示數據庫對象的LINQ to SQL實體類

  例如清單包含了一個名為HomeController的類繼承自DataController類注意Movie類型被傳到了DataController類中Movie類是一個LINQ to SQL實體是使用Visual Studio對象關系設計器創建的

  清單 HomeControllercs

            using System;
        using SystemCollectionsGeneric;
        using SystemLinq;
        using SystemWeb;
        using SystemWebMvc;
        using TipModels;
        namespace TipControllers
        {
            public class HomeController : DataController<Movie>
            {
                /**//// <summary>
                /// Show Movies in a Category
                /// </summary>
                public ActionResult Category(int Id)
                {
                    var results = from m in thisTable where mCategoryId == Id select m;
                    return View(results);
                }
            }
        }

  由於HomeController類繼承自DataController類所以HomeController類自動暴露了Index()Details()Create()New()Edit()Update()和Delete()等幾個action由於向DataController傳遞了Movie實體所以可以通過HomeController在Movie數據表上執行這些操作

  在使用DataController類之前你需要向應用程序的nfig文件添加一個名為dataController的連接字符串你可以從Visual Studio對象關系設計器生成的代碼中復制連接字符串並改名為dataController

  要使用DataController類還需要創建一組視圖你需要創建下面一組視圖          Indexaspx
        Detailsaspx
        Createaspx
        Editaspx

  在明天的Tip中我會想你展示如何為所有控制器類只創建一次視圖——創建共享視圖不過這是明天的主題讓我們回到DataController上來

  不幸的是DataController太長了不適合粘貼到blog裡你可以下載DataController類並試用其中的示例項目單擊本文後面的鏈接可以下載示例代碼

  示例項目中包含上面列出的四個視圖你可以使用示例項目來顯示插入更新和刪除Movies數據表中的數據記錄例如包含了Indexaspx視圖生成的頁面

  圖 Indexaspx視圖       

  

  我希望當ASPNET MVC框架最終發布時能有數以百計的由開發者創建的自定義控制器基類我認為控制器基類可以用於大量不同的場景中——驗證購物車產品目錄等等任何時候只要你需要相應成程序中不止一次地加入一組標准操作你就有必要創建一個新的控制器基類


From:http://tw.wingwit.com/Article/program/net/201311/13301.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.