使用AutoMapper.EF6,但Mapper未初始化错误发生

时间:2017-06-11 09:26:29

标签: c# asp.net-mvc automapper

错误信息:

  

Mapper未初始化。使用适当的方式调用Initialize   组态。如果您尝试通过a使用映射器实例   容器或其他,请确保您没有任何电话   静态Mapper.Map方法,如果您正在使用ProjectTo或   UseAsDataSource扩展方法,请确保传入   适当的IConfigurationProvider实例。的InnerException:   StackTrace:在AutoMapper.Mapper.get_Configuration()

asp.net mvc5控制器代码

public override ActionResult Kendo_Read(DataSourceRequest request, IQueryable<Activity> results)
{
    var data = results.ProjectTo<ActivityViewModel>();
    var rdata = data.ToDataSourceResult(request);
    return Json(rdata);
}

AutoMapper配置代码

public class CRMProfile : Profile
{
  CreateMap<Activity, ActivityViewModel>();
}

public static class Configuration
{
   public static MapperConfiguration MapperConfiguration()
   {
        return new MapperConfiguration(x =>
        {
            x.AddProfile(new CRMProfile());
        }
   }
}

注册码

internal static MapperConfiguration MapperConfiguration { get; private set; }
public class MvcApplication : System.Web.HttpApplication
{
      MapperConfiguration = Configuration.MapperConfiguration();
}

i home返回数据类型在控制器中是IQueryable,而不是List, 我在stackoverflow中看到Question和问题,但无法解决我的问题。

1 个答案:

答案 0 :(得分:1)

AutoMapper's source code您可以看到,当配置未初始化时,将抛出此异常:

public static IConfigurationProvider Configuration
{
    get => _configuration ?? throw new InvalidOperationException(InvalidOperationMessage);
    private set => _configuration = value;
}

确保Mapper使用静态属性正确配置或使用IoC容器正确注册(请参阅documentation了解详细信息)。你可能错过了Mapper.Initialize()电话吗?