2011-09-29 56 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

可能有可能,但编写自己的代码将会更容易处理代码与其他人的区别。 –