2011-09-29 58 views
1

我使用EF與ViewModel和AutoMapper設計策略的MVC3應用程序。ASP.NET MVC3實體與ViewModel CRUD頁面

我想知道是否有更有效的方式創建CRUD頁面,然後我正在做什麼。

我目前的過程包括:

  • 創建實體
  • 創建視圖模型通過複製粘貼,然後刪除非必填字段
  • 實體添加到上下文列表
  • 創建通過控制器Visual Studio 2010創建控制器嚮導頁面。
  • 我使用實體框架來選擇具有讀寫操作和視圖的控制器模板。
  • 我選擇我的模型是我的ViewModel而不是我的實體。
  • 我選擇適當的上下文。
  • 現在部分我分手,我認爲可以提高,我不得不重新編寫所有的CRUD方法使用AutoMapper和實體/視圖模型設計模式發生變化:

return View(db.BlockedUserViewModels.ToList());

成:

IList<BlockedUser> blockedUsers = db.BlockedUsers.ToList(); 
IList<BlockedUserViewModel> blockedUserVMs = AutoMapper.Mapper.Map<IList<BlockedUser>, IList<BlockedUserViewModel>>(blockedUsers); 
return View(blockedUserVMs); 
  • 我必須相同的[授權]和角色的權限添加到每個控制器CRUD選項。

這似乎過度的工作量!我希望有更好的解決方案。 (我來自Python/Django,它需要一行代碼來創建漂亮的強壯的CRUD頁面)

回答

2

這聽起來像你可以添加一個服務並注入到控制器。然後,你只需要調用

var model = _service.GetBlockedUsers(); 

每次代替:

IList<BlockedUser> blockedUsers = db.BlockedUsers.ToList(); 
IList<BlockedUserViewModel> blockedUserVMs = AutoMapper.Mapper.Map<IList<BlockedUser>, IList<BlockedUserViewModel>>(blockedUsers); 

這將讓你的控制器光,並作爲保持你的CRUD邏輯的地方,這樣你就不必再重複它到處。

此外,如果適用於控制器中的每個操作,則可以將[Authorize]屬性添加到控制器。

+0

好點,我忽略了尋找一個包爲我提供這個簡單的解決方案。將這些實用方法置於上下文中是否合適?感謝關於控制器[授權]屬性的提示,不幸的是它們不一致。 – Valchris

+0

這取決於你的實現。我將存儲庫模式與我的實體一起使用,以便他們管理CRUD操作,而我的服務只是將我的存儲庫映射到與其關聯的視圖模型相關的存儲庫的包裝器。 – shuniar

+0

知道你的描述的教程/例子?我讀過一提有關資源庫的功能,但並不完全理解複雜 – Valchris

1

這實際上取決於您對此有多痛苦,但您始終可以使用MVC腳手架Nuget,由Steven Sanderson撰寫。從長遠來看,投入一些時間可以幫助你,但是你必須弄清楚它是否適合你。

http://blog.stevensanderson.com/2011/01/13/scaffold-your-aspnet-mvc-3-project-with-the-mvcscaffolding-package/

+0

我之前簡單地看過這個,它絕對看起來有能力做我正在尋找的東西,但我需要從頭開始寫腳手架。必須有人用AutoMapper完成腳手架的工作,並提供代碼! – Valchris

+0

可能有可能,但編寫自己的代碼將會更容易處理代碼與其他人的區別。 –