C# Automapper 6.0。缺少类型映射配置或不支持的映射

C# Automapper 6.0。缺少类型映射配置或不支持的映射,c#,asp.net,asp.net-mvc,asp.net-web-api,automapper,C#,Asp.net,Asp.net Mvc,Asp.net Web Api,Automapper,我已经看过了,还有 当我从automapper3.3.1.0移动到automapper6.0.1.0时,出现了这个异常。此代码在Automapper 3.3.1.0中不会引发异常 我有两门课: 第1类:(领域) 我有以下例外: 缺少类型映射配置或不支持的映射 映射类型:Movie->MovieViewModel HomeCinema.Entities.Movie-> HomeCinema.Web.Models.MovieViewModel 我试图通过Ignore()方法找出什么属性是这个异常的原

我已经看过了,还有

当我从
automapper3.3.1.0
移动到
automapper6.0.1.0
时,出现了这个异常。此代码在
Automapper 3.3.1.0
中不会引发异常

我有两门课:

第1类:(领域)

我有以下例外:

缺少类型映射配置或不支持的映射

映射类型:Movie->MovieViewModel HomeCinema.Entities.Movie-> HomeCinema.Web.Models.MovieViewModel

我试图通过
Ignore()
方法找出什么属性是这个异常的原因,但是,我仍然得到了上面的异常

 cfg.CreateMap<Genre, GenreViewModel>()
                    .ForMember(vm => vm.NumberOfMovies, map => map.MapFrom(g => g.Movies.Count()));

 cfg.CreateMap<Movie, MovieViewModel>()
    .ForMember(vm => vm.Genre, map => map.Ignore())
    .ForMember(vm => vm.GenreId, map => map.Ignore())
    .ForMember(vm => vm.IsAvailable, map => map.Ignore())
    .ForMember(vm => vm.NumberOfStocks, map => map.Ignore())
    .ForMember(vm => vm.Image, map => map.Ignore());
你能告诉我我做错了什么吗?任何帮助都将不胜感激


最有趣的一点是,此代码在
AutoMapper 3.3.1.0
中有效

更新:

它起作用了!:)感谢你们,伙计们,特别感谢@Andrivilitvinov。工作守则:

public class DomainToViewModelMappingProfile : Profile
{
    public override string ProfileName
    {
        get { return "DomainToViewModelMappings"; }
    }

    public DomainToViewModelMappingProfile()
    {

        CreateMap<Genre, GenreViewModel>()
                    .ForMember(vm => vm.NumberOfMovies, map => map.MapFrom(g => g.Movies.Count()));

        CreateMap<Movie, MovieViewModel>()
         .ForMember(vm => vm.Genre, map => map.MapFrom(m => m.Genre.Name))
         .ForMember(vm => vm.GenreId, map => map.MapFrom(m => m.Genre.ID))
         .ForMember(vm => vm.IsAvailable, map => map.MapFrom(m => m.Stocks.Any(s => s.IsAvailable)))
         .ForMember(vm => vm.NumberOfStocks, map => map.MapFrom(m => m.Stocks.Count))
         .ForMember(vm => vm.Image, map => map.MapFrom(m => string.IsNullOrEmpty(m.Image) == true ? "unknown.jpg" : m.Image));
     }
}

当您调用
Mapper.assertconfigurationsvalid()时方法必须确保每个属性都有要映射的有效源和目标。如果没有每个属性的有效源和目标,则会出现错误。如果您查看错误消息,事实上它会告诉您详细信息。我只是浏览了一下您的代码,但例如,
public virtual ICollection Stocks{get;set;}
没有映射。

我尝试在本地实现这种映射,并且都成功了。我假设您有许多配置文件,所有这些配置文件都调用
Mapper.Initialize
,据我所知,这意味着在应用程序启动时只调用一次,所有配置文件都应调用:

公共类映射配置文件:配置文件
{
公共映射配置文件()
{
CreateMap();
}
}

此代码在
AutoMapper 3.3.1.0
中有效,无需映射
Stocks
@steppup我很高兴您解决了问题。从版本3到版本6有了很大的变化。您不应该期望它在每个版本上都能工作。例如,据我所知,您正在使用AutoMapper的静态API,在某个时候(我猜是5.x版),静态API完全被丢弃,并在稍后返回。对不起,但“拥有多个配置文件”是什么意思?我只有一个类
classdomaintoviewmodelmappingprofile:Profile
。我指的是从
Profile
驱动的许多类,它们依次调用
Mapper.Initialize
。我重写了代码,只调用了一次这个方法
Initialize()
。请参阅我的更新部分。在
Mapper.Initialize
之前调用
Mapper.assertconfigurationsvalid
时,我会遇到相同的异常。确保你把事情按正确的顺序进行。不客气,我很高兴这有帮助。我在升级到v5时遇到了类似的问题。您最初出现问题的原因是在第一次调用初始化时没有注册映射,第二次调用没有产生任何效果。第二个问题是在您尝试验证配置之前根本没有调用Initialize。我希望这是有道理的。
public class DomainToViewModelMappingProfile : Profile
{
    public override string ProfileName
    {
        get { return "DomainToViewModelMappings"; }
    }

    public DomainToViewModelMappingProfile()
    {
        Mapper.Initialize(cfg => {
           cfg.CreateMap<Genre, GenreViewModel>()
                    .ForMember(vm => vm.NumberOfMovies, map => map.MapFrom(g => g.Movies.Count()));

           cfg.CreateMap<Movie, MovieViewModel>()
             .ForMember(vm => vm.Genre, map => map.MapFrom(m => m.Genre.Name))
             .ForMember(vm => vm.GenreId, map => map.MapFrom(m => m.Genre.ID))
             .ForMember(vm => vm.IsAvailable, map => map.MapFrom(m => m.Stocks.Any(s => s.IsAvailable)))
             .ForMember(vm => vm.NumberOfStocks, map => map.MapFrom(m => m.Stocks.Count))
             .ForMember(vm => vm.Image, map => map.MapFrom(m => string.IsNullOrEmpty(m.Image) == true ? "unknown.jpg" : m.Image));
        });                
        Mapper.AssertConfigurationIsValid();
     }            
  }
 cfg.CreateMap<Genre, GenreViewModel>()
                    .ForMember(vm => vm.NumberOfMovies, map => map.MapFrom(g => g.Movies.Count()));

 cfg.CreateMap<Movie, MovieViewModel>()
    .ForMember(vm => vm.Genre, map => map.Ignore())
    .ForMember(vm => vm.GenreId, map => map.Ignore())
    .ForMember(vm => vm.IsAvailable, map => map.Ignore())
    .ForMember(vm => vm.NumberOfStocks, map => map.Ignore())
    .ForMember(vm => vm.Image, map => map.Ignore());
AutoMapperConfiguration.Configure();
public class DomainToViewModelMappingProfile : Profile
{
    public override string ProfileName
    {
        get { return "DomainToViewModelMappings"; }
    }

    public DomainToViewModelMappingProfile()
    {

        CreateMap<Genre, GenreViewModel>()
                    .ForMember(vm => vm.NumberOfMovies, map => map.MapFrom(g => g.Movies.Count()));

        CreateMap<Movie, MovieViewModel>()
         .ForMember(vm => vm.Genre, map => map.MapFrom(m => m.Genre.Name))
         .ForMember(vm => vm.GenreId, map => map.MapFrom(m => m.Genre.ID))
         .ForMember(vm => vm.IsAvailable, map => map.MapFrom(m => m.Stocks.Any(s => s.IsAvailable)))
         .ForMember(vm => vm.NumberOfStocks, map => map.MapFrom(m => m.Stocks.Count))
         .ForMember(vm => vm.Image, map => map.MapFrom(m => string.IsNullOrEmpty(m.Image) == true ? "unknown.jpg" : m.Image));
     }
}
//Global.asax.cs
protected void Application_Start()
{
   var config = GlobalConfiguration.Configuration;

   AreaRegistration.RegisterAllAreas();
   WebApiConfig.Register(config);
   Bootstrapper.Run();
   RouteConfig.RegisterRoutes(RouteTable.Routes);
   GlobalConfiguration.Configuration.EnsureInitialized();
   BundleConfig.RegisterBundles(BundleTable.Bundles);
}

public class AutoMapperConfiguration
{
    public static void Configure()
    {
        Mapper.Initialize(x =>
        {
            x.AddProfile<DomainToViewModelMappingProfile>();
        });
    }
}

public class Bootstrapper
{
    public static void `Run()
    {
        //Configure Autofac
        AutofacWebapiConfig.Initialize(GlobalConfiguration.Configuration);

        //Configure Automapper
        AutoMapperConfiguration.Configure();
    }
}
public class MappingProfile : Profile
{
    public MappingProfile()
    {
        CreateMap<Foo, Bar>();
    }
}