.Net Core Automapper 缺少类型映射配置或不受支持的映射

Nir*_*ole 6 c# automapper .net-core

网络核心应用。我正在尝试使用自动映射器,但导致以下错误。

.Net Core Automapper missing type map configuration or unsupported mapping
Run Code Online (Sandbox Code Playgroud)

我在startup.cs中有以下设置

var mappingConfig = new MapperConfiguration(mc =>
            {
                mc.AddProfile(new MappingProfile());
            });

            IMapper mapper = mappingConfig.CreateMapper();
            services.AddSingleton(mapper);
Run Code Online (Sandbox Code Playgroud)

然后我使用配置文件。

  public class MappingProfile : Profile
    {

        public MappingProfile()
        {
            this.CreateMap<Geography, GeographyEntity>();
            this.CreateMap<Model1, Model2>();
        }

    }
Run Code Online (Sandbox Code Playgroud)

我正在使用自动映射器如下

 Model1 model = this.Mapper.Map<Model1>(Model2);
Run Code Online (Sandbox Code Playgroud)

下面是型号

 public partial class Model1
    {
        public int SNo { get; set; }
        public string SarNo { get; set; }
        public string SiteName { get; set; }
        public string Client { get; set; }
        public int CId { get; set; }
        public DateTime StartDate { get; set; }
        public bool IsActive { get; set; }

        public virtual Model2 C { get; set; }
    }

public class Model2
{
    public int SNo { get; set; }

    public string SarNo { get; set; }

    public string SiteName { get; set; }

    public int CId { get; set; }

    public string Client { get; set; }

    public bool? IsActive { get; set; }

    public DateTime StartDate { get; set; }

}
Run Code Online (Sandbox Code Playgroud)

我在自动映射器中遇到以下错误。

AutoMapper.AutoMapperMappingException:缺少类型映射配置或不受支持的映射。

有人可以帮我理解这个错误吗?任何帮助将不胜感激。谢谢

Ami*_*mit 10

我有同样的错误。我花了几个小时所以我想我应该在这里提到它。

我有不同的 Api、域/实体、DTO 和映射配置文件项目。

有两个问题。首先,我忘记将 DTO 映射配置文件类标记为公共。其次,我在启动类中注册了自动映射器,如下所示:

services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
Run Code Online (Sandbox Code Playgroud)

如果您的映射配置文件位于同一程序集中,则上述行可以正常工作。就我而言,映射配置文件位于不同的组件中,因此这不会获取配置文件。为了解决这个问题,我使用了以下方法:

services.AddAutoMapper(Assembly.Load("Your assembly name"));
Run Code Online (Sandbox Code Playgroud)


小智 7

在一些教程中而不是

var mappingConfig = new MapperConfiguration(mc =>
        {
            mc.AddProfile(new MappingProfile());
        });

        IMapper mapper = mappingConfig.CreateMapper();
        services.AddSingleton(mapper);
Run Code Online (Sandbox Code Playgroud)

使用

service.AddAutoMapper({profile assembly marker types});
Run Code Online (Sandbox Code Playgroud)

通常,在这些教程中,他们指的是启动。实际上,程序集标记应该是您的配置文件映射类。在这种情况下,应该是

service.AddAutoMapper(typeof(MappingProfile));
Run Code Online (Sandbox Code Playgroud)


Gur*_*ron 5

this.CreateMap<Model1, Model2>();将从Model1to创建地图Model2,所以这应该有效:

Model2 model = this.Mapper.Map<Model2>(new Model1());
Run Code Online (Sandbox Code Playgroud)

如果您想要反之亦然,请将注册更改为:

this.CreateMap<Model2, Model1>(); 
Run Code Online (Sandbox Code Playgroud)

或添加ReverseMap双向之一:

this.CreateMap<Model1, Model2>().ReverseMap();
Run Code Online (Sandbox Code Playgroud)