無論什麼時候你在寫代碼時都會發現其實你在一遍又一遍地編寫著同樣類型的代碼現在是時候停下來考慮一下你是否正在浪費者大量的時間昨天我發現在創建一個數據庫驅動的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對象關系設計器創建的
From:http://tw.wingwit.com/Article/program/net/201311/11686.html