Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 5 需要验证在Asp.Net MVC中正确实现的Autommaper_Asp.net Mvc 5_Entity Framework 6_Automapper - Fatal编程技术网

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

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时,数据是如何绑定到网格的。我期待着就我所采取的方法提出建议

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