Asp.net mvc 5 需要验证在Asp.Net MVC中正确实现的Autommaper
我已经在我的MVC项目中实现了Automapper,但不确定它是否正确。我目前正在使用EntityFramework数据库优先方法,并使用存储过程检索数据。正如您所知,实体框架创建了复杂类型的对象,它是存储过程的包装器。一个是在repository类中用于将复杂类型映射到实体类,另一个是viewmodel,用于将实体类映射到控制器中的视图模型。我尚未在控制器中将实体类显式映射到viewmodel。所以我想知道当网格需要viewmodel时,数据是如何绑定到网格的。我期待着就我所采取的方法提出建议Asp.net mvc 5 需要验证在Asp.Net MVC中正确实现的Autommaper,asp.net-mvc-5,entity-framework-6,automapper,Asp.net Mvc 5,Entity Framework 6,Automapper,我已经在我的MVC项目中实现了Automapper,但不确定它是否正确。我目前正在使用EntityFramework数据库优先方法,并使用存储过程检索数据。正如您所知,实体框架创建了复杂类型的对象,它是存储过程的包装器。一个是在repository类中用于将复杂类型映射到实体类,另一个是viewmodel,用于将实体类映射到控制器中的视图模型。我尚未在控制器中将实体类显式映射到viewmodel。所以我想知道当网格需要viewmodel时,数据是如何绑定到网格的。我期待着就我所采取的方法提出建议
spGetUserProfileByUserProfileID_Result - Complex type object
UserProfile - Entity class.
UserProfileViewModel - ViewModel
自动映射配置类
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();
}
}
如果将以下内容添加到控制器以映射到viewmodel,则会出现一个错误:缺少类型映射配置或映射不受支持
映射类型:
数据源结果->用户配置文件
Kendo.Mvc.UI.DataSourceResult->CC.GRP.MCRequest.Models.UserProfile
var userProfile = mcrRepository.GetUserProfileById(0).ToDataSourceResult(request);
return Json(Mapper.Map<UserProfile>(userProfile), JsonRequestBehavior.AllowGet);
var userProfile=mcrRepository.GetUserProfileById(0).ToDataSourceResult(请求);
返回Json(Mapper.Map(userProfile)、JsonRequestBehavior.AllowGet);
如果您的问题是如何使用Automapper从控制器返回viewmodel而不是实体模型,请使用:
使用Automapper.QueryableExtensions;
...
public JsonResult UserProfile_Read([DataSourceRequest]DataSourceRequest请求)
{
var users=mcrRepository.GetUserProfileById(0.Project().To();
var response=users.ToDataSourceResult(请求);
返回Json(response,JsonRequestBehavior.AllowGet);
}
如果您的问题是如何使用Automapper从控制器返回viewmodel而不是实体模型,请使用:
使用Automapper.QueryableExtensions;
...
public JsonResult UserProfile_Read([DataSourceRequest]DataSourceRequest请求)
{
var users=mcrRepository.GetUserProfileById(0.Project().To();
var response=users.ToDataSourceResult(请求);
返回Json(response,JsonRequestBehavior.AllowGet);
}
我在Project()下看到一条红色的曲线。看起来我的automapper版本不支持。我目前正在使用最新版本的Automapper。我做了此更改,看起来它可以工作var users=mcrRepository.GetUserProfileById(0.AsQueryable().ProjectTo();是的,我的是Automapper 3,但是语法在版本4和更高版本中发生了变化。我正在标记答案,因为您已经向我展示了概念,我在Project()下得到了一条红色的曲线。看起来我的automapper版本不支持。我目前正在使用最新版本的Automapper。我做了此更改,看起来它可以工作var users=mcrRepository.GetUserProfileById(0.AsQueryable().ProjectTo();是的,我的是Automapper 3,但是语法在版本4和更高版本中发生了变化。我正在标记答案,因为你已经向我展示了这个概念
public ActionResult UserProfile_Read([DataSourceRequest]DataSourceRequest request)
{
var response = mcrRepository.GetUserProfileById(0).ToDataSourceResult(request);
return Json(response, JsonRequestBehavior.AllowGet);
}
var userProfile = mcrRepository.GetUserProfileById(0).ToDataSourceResult(request);
return Json(Mapper.Map<UserProfile>(userProfile), JsonRequestBehavior.AllowGet);
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);
}