我已在我的MVC项目中实现了Automapper,但不确定它是否已正确完成。我目前正在使用Entity Framework Database First Approach并使用存储过程检索数据。正如您所知,实体框架创建了复杂的类型对象,它是存储过程的包装。所以我创建了两个用于映射目的的类。一个在repository类中用于将复杂类型映射到Entity类,第二个是用于将实体类映射到控制器中的视图模型的viewmodel。我没有在控制器中将我的实体类显式映射到viewmodel。所以我想知道当网格期望视图模型时数据如何绑定到网格。我期待着就我所采取的方法提出建议。
spGetUserProfileByUserProfileID_Result - Complex type object
UserProfile - Entity class.
UserProfileViewModel - ViewModel
AutoMapperConfiguration类
public static void Configure()
{
Assembly[] assemblies = BuildManager.GetReferencedAssemblies().OfType<Assembly>().ToArray();
Mapper.Initialize(cfg =>
cfg.AddProfiles(AllClasses.FromAssemblies(assemblies)
.Where(
a =>
a.FullName.EndsWith("Mapping"))));
}
映射类
public class DomainToModelMapping : Profile
{
public DomainToModelMapping()
{
CreateMap<spGetUserProfileByUserProfileID_Result, UserProfile>().ReverseMap();
CreateMap<UserProfileViewModel, UserProfile>().ReverseMap();
}
}
存储库
public List<UserProfile> GetUserProfileById(int id)
{
if (MCRHelper.UserValidate() == 1)
{
var userProfiles = db.spGetUserProfileByUserProfileID(id);
return Mapper.Map<List<UserProfile>>(userProfiles);
}
else
{
return null;
}
}
控制器
public ActionResult UserProfile_Read([DataSourceRequest]DataSourceRequest request)
{
var response = mcrRepository.GetUserProfileById(0).ToDataSourceResult(request);
return Json(response, JsonRequestBehavior.AllowGet);
}
如果我将以下内容添加到我的控制器以映射到viewmodel,我会收到错误类型映射配置错误或不支持的映射。
映射类型: DataSourceResult - &gt;用户资料 Kendo.Mvc.UI.DataSourceResult - &gt; CC.GRP.MCRequest.Models.UserProfile
var userProfile = mcrRepository.GetUserProfileById(0).ToDataSourceResult(request);
return Json(Mapper.Map<UserProfile>(userProfile), JsonRequestBehavior.AllowGet);
答案 0 :(得分:0)
如果您的问题是如何使用Automapper从控制器返回viewmodel而不是实体模型,那么请使用Automapper Queryable Extensions:
using Automapper.QueryableExtensions;
...
public JsonResult UserProfile_Read([DataSourceRequest]DataSourceRequest request)
{
var users = mcrRepository.GetUserProfileById(0).Project().To<UserProfileViewModel>();
var response = users.ToDataSourceResult(request);
return Json(response, JsonRequestBehavior.AllowGet);
}