ASP.NET MVC3实体与ViewModel CRUD页面

时间:2011-09-29 18:45:57

标签: asp.net-mvc-3 automapper

我正在为MVC3应用程序使用EF和ViewModel以及AutoMapper设计策略。

我想知道是否有更有效的方法来创建CRUD页面然后我正在做的事情。

我当前的流程涉及:

  • 创建实体
  • 通过复制粘贴创建ViewModel,然后删除非必填字段
  • 将实体添加到上下文列表
  • 通过Visual Studio 2010创建控制器向导页面创建控制器。
  • 我使用Entity Framework选择具有读写操作和视图的控制器模板。
  • 我选择我的模型作为我的ViewModel而不是我的实体。
  • 我选择了合适的背景。
  • 现在我认为可以改进的部分,我必须重新编写所有CRUD方法以使用AutoMapper和实体/ ViewModel设计模式改变:

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 个答案:

答案 0 :(得分:2)

听起来您可以添加服务并将其注入控制器。那你只需要打电话

var model = _service.GetBlockedUsers();

每次都代替:

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

这将使您的控制器保持轻盈,并充当保持您的crud逻辑的地方,因此您无需在任何地方重复它。

此外,如果控制器中的每个操作都适用,您可以将[Authorize]属性添加到控制器中。

答案 1 :(得分:1)

这实际上取决于这对你有多痛苦,但你总是可以使用Nuget中发现并由Steven Sanderson编写的MVC脚手架。从长远来看,投入一些时间可以帮助你,但你必须弄清楚它是否适合你。

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