需要验证在Asp.Net MVC中正确实现的Autommaper

时间:2017-03-23 13:30:11

标签: asp.net-mvc-5 entity-framework-6 automapper

我已在我的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);

1 个答案:

答案 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);
}