Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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
C# 无法将自动映射器与.net core 2.2一起使用_C#_Asp.net Core_.net Core_Automapper - Fatal编程技术网

C# 无法将自动映射器与.net core 2.2一起使用

C# 无法将自动映射器与.net core 2.2一起使用,c#,asp.net-core,.net-core,automapper,C#,Asp.net Core,.net Core,Automapper,我无法将自动映射器与.net core 2.2一起使用。它会不断抛出此错误: 找到了未映射的成员。查看下面的类型和成员。添加 自定义映射表达式、忽略、添加自定义解析器或修改 无匹配构造函数的源/目标类型,请添加无参数 ctor,添加可选参数,或映射所有构造函数参数 第可见可见第第第列列第第第列列第第第第可见可见第第第第列列第第第列列第第第第第列列列第第第第第第第第第列列第第第第列列列第第第第第第第第第列列列第第第第列列第第第第第第第列列列第第第第第第第列列列列第第第第第第第第列列列列列列第第第第

我无法将自动映射器与.net core 2.2一起使用。它会不断抛出此错误:

找到了未映射的成员。查看下面的类型和成员。添加 自定义映射表达式、忽略、添加自定义解析器或修改 无匹配构造函数的源/目标类型,请添加无参数 ctor,添加可选参数,或映射所有构造函数参数 第可见可见第第第列列第第第列列第第第第可见可见第第第第列列第第第列列第第第第第列列列第第第第第第第第第列列第第第第列列列第第第第第第第第第列列列第第第第列列第第第第第第第列列列第第第第第第第列列列列第第第第第第第第列列列列列列第第第第第第第第第第第第第第第第第第第列列列列列列列列列列第第第第第第第第第第第第第第第第第第第第第第第第列列列列列列列列列列第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第=========AutoMapper为您创建了此类型映射,但无法删除您的类型 使用当前配置映射。IDataReader->List1 目标成员列表System.Data.IDataReader-> System.Collections.Generic.List1[[Models.EngineModel, 模型,版本=1.0.0.0,区域性=中性, PublicKeyToken=null]]目标成员列表

未映射属性:容量

这是我的EngineModel类:

公共类引擎模型 { 公共字符串Id{get;set;} 公共int引擎{get;set;} 公共字符串引擎主机{get;set;} } 这是我的个人资料:

公共类EngineMappingProfile:配置文件 { 公共引擎配置文件 { 创建地图 .FormMemberDest=>dest.Id,opt=>opt.MapFromsrc=>src.GetStringsrc.GetOrdinalID .ForMemberdest=>dest.engineNo,opt=>opt.MapFromsrc=>src.GetInt32src.GetOrdinalENG_NO .ForMemberdest=>dest.engineHost,opt=>opt.MapFromsrc=>src.GetStringsrc.GetOrdinalENG_主机 } } 以下是我的Startup.cs ConfigureServices方法:

公共无效配置服务服务服务收集服务 { Mapper.Initializecfg=> { cfg.AddProfile; }; services.AddAutoMapper; services.AddMvc .SetCompatibilityVersionCompatibilityVersion.Version_2_2 .AddJsonOptions=> { options.SerializerSettings.NullValueHandling=Newtonsoft.Json.NullValueHandling.Ignore; }; } 以上所有代码都在我的API项目中。我在我的商业项目中使用这些配置文件:

var enginesData=AutoMapper.Mapper.MapdataReader.mcDataReader;
我正在使用AutoMapper.Extensions.Microsoft.DependencyInjection 6.0.0和AutoMapper 8.0.0,AutoMapper正在抱怨,因为IDataReader有您尚未指定的其他属性。您要么需要映射所有在本例中显然不需要的对象,要么指定应忽略这些对象,例如:

        CreateMap<IDataReader, EngineModel>()
           .ForMember(...)
           .ForMember(...)
           .ForMember(...)
           .ForAllOtherMembers(x => x.Ignore()); // < -- Add this line

我使用的版本与你的相同,所以这就是我如何调节我的汽车制造商

在我的startup.cs中,我只需要这个

services.AddAutoMapper(config => config.ValidateInlineMaps = false);
以及如何创建Profile类

public class CommentProfile : Profile
{
    public CommentProfile()
    {
        CreateMap<Comment, CommentDto>(MemberList.None).ReverseMap();
    }
}

public class Comment : BaseEntity
{
    public string Content { get; set; }
    public virtual Comment ParentComment { get; set; }
    public virtual Post Post { get; set; }
    public virtual User? User { get; set; }
    public CommentStatus CommentStatus { get; set; }
}

public class CommentDto
{
    public int Id { get; set; }
    public Guid UniqeId { get; set; }
    public string Content { get; set; }
    public Comment ParentComment { get; set; }
    public CommentStatus CommentStatus { get; set; }
    public DateTime DateCreated { get; set; }
}
您所需要的只是:

services.AddAutoMapper();
在服务集合中注册IMapper,并将命名空间中的所有概要文件应用于自动从概要文件继承的任何类

然后,应该注入IMapper,而不是使用静态映射器。在控制器中:

public class MyController : Controller
{
    private readonly IMapper _mapper;

    public MyController(IMapper mapper)
    {
        _mapper = mapper;
    }
然后,当您要映射某个对象时:

 var enginesData = _mapper.Map<List<EngineModel>>(dataReader.mcDataReader);
但是,您不能直接将IDataReader实例映射到列表,这是您的主要问题。您需要枚举将行存储为列表中的项目的数据读取器,然后可以从该列表映射到您的列表。不过,在这一点上,只需将行读取为EngineModel,并在枚举数据读取器时构建列表可能更有意义。这样就根本不需要映射了。

您只需要在您的情况下从NuGet软件包中安装3.0.0,然后在启动时添加以下代码:

services.AddAutoMapper(cfg =>
{
    cfg.AddDataReaderMapping();
});


将其添加到services.AddAutoMapper会引发相同的错误。但如果我这样做,它不会抛出任何错误,但也没有映射任何内容。代码映射器.Initializecfg=>{cfg.AddProfile;};services.AddAutoMapper;同样的错误。虽然我已经添加了这个,但是班上没有其他成员。所有成员都已映射。还有一件事我注意到,即使我没有在startup.cs中提供该配置文件。它向我抛出了相同的错误。看起来您可能缺少一个配置文件。您显示了用于映射IDataReader->EngineModel的配置文件,但实际上您正在尝试映射IDataReader->List。它在.net framework中正常工作,在.net framework Web API中正常工作。在数据读取器中循环并一次映射一行是非常低效的time@Imran我将使用ProjectTo-so var enginesData=\u mapper.ProjectTodataReader.mcDataReader;你认为AutoMapper会做什么?同样的事,是的,我知道了。此外,应该在映射中使用IDataRecord而不是IDataReader:CreateMap