c# – ASP.NET MVC – 使用Automapper映射

我正在试图找出何时使用ViewModels,何时不使用.我正在使用Automapper的任务,目前有以下代码:

// AccountController.cs

[AuthWhereRole(Roles = AuthorizeRole.Developer)]
public ActionResult List()
{
    MembershipUserCollection users = _memberShipService.GetAllUsers();
    IEnumerable<ListUsersViewModel> viewModel =
            Mapper.Map<IEnumerable<MembershipUser>, IEnumerable<ListUsersViewModel>>(users.Cast<MembershipUser>().AsEnumerable());

    return View("List", viewModel);
}

// ListUsersViewModel.cs

public class ListUsersViewModel
{
    public Guid Id { get; set; }
    public virtual string UserName { get; set; }
    public string LastLogOn { get; set; }
}

// Bootstrapper.cs

public static void ConfigureAutoMapper()
{
    Mapper.CreateMap<MembershipUser, ListUsersViewModel>()
            .ForMember(x => x.UserName, o => o.MapFrom(s => s.UserName))
            .ForMember(x => x.Id, o => o.MapFrom(s => s.ProviderUserKey))
            .ForMember(x => x.LastLogOn, o => o.MapFrom(s => s.LastLoginDate));
}

我想知道它的坏做法是否像这样映射只是为了从域模型中排除一些属性? – 我应该总是使用View Models,即使不需要?

提前致谢.

最佳答案
总之,是的,您应该始终使用ViewModel.

我们在我们的项目中使用AutoMapper,最初我们没有为每个视图提供单独的ViewModels.我们发现如果对象相互引用(即,用户具有具有用户角色的登录名),我们会出现一些性能问题. AutoMapper不知道何时停止构建这些集合.

虽然这不是简单页面上的问题,例如您的示例中的一个问题,但我们决定为每个仅提供该ViewModel需要的属性的View创建一个ViewModel.这解决了权限问题,并且使得查看View所需的信息变得非常简单.

Jimmy Bogard在一篇博客文章中谈到了这个方法:http://www.lostechies.com/blogs/jimmy_bogard/archive/2009/06/29/how-we-do-mvc-view-models.aspx

转载注明原文:c# – ASP.NET MVC – 使用Automapper映射 - 代码日志