gpt4 book ai didi

c# - ASP.NET MVC - 使用 Automapper 进行映射

转载 作者:可可西里 更新时间:2023-11-01 08:05:18 25 4
gpt4 key购买 nike

我目前正在尝试确定何时使用 ViewModel,何时不使用。我正在使用 Automapper 完成任务,目前有以下代码:

//账户 Controller .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; }
}

// Bootstrap .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,最初我们没有为每个 View 提供单独的 ViewModel。我们发现,如果对象相互引用(即用户有登录,有角色有用户),我们会遇到一些性能问题。 AutoMapper 不知道何时停止构建这些集合。

虽然这在简单页面(例如您的示例中的页面)上不是问题,但我们决定为每个 View 创建一个 ViewModel,它只提供该 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 进行映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4608274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com