C# AutoMapper Ignore()不工作

C# AutoMapper Ignore()不工作,c#,asp.net-core,automapper,C#,Asp.net Core,Automapper,AutoMapper不断抛出一个错误,指出我有未映射的属性(CustomerId、CreateDate、UpdateDate)。我试图从数据库中检索结果,但出于某种原因,它认为这些字段没有设置。我只是想让错误暂时消失,所以我尝试在这3个字段上设置Ignore(),但是,我仍然得到了错误 我的startup.cs是我初始化的地方:Project.Api startup.cs public void ConfigureServices(IServiceCollection services) {

AutoMapper不断抛出一个错误,指出我有未映射的属性(CustomerId、CreateDate、UpdateDate)。我试图从数据库中检索结果,但出于某种原因,它认为这些字段没有设置。我只是想让错误暂时消失,所以我尝试在这3个字段上设置Ignore(),但是,我仍然得到了错误

我的startup.cs是我初始化的地方:Project.Api startup.cs

public void ConfigureServices(IServiceCollection services)
{
    ....
    services.AddAutoMapper();
    ....
}
protected readonly Context Context;
protected readonly IMapper Mapper;
protected BaseService(Context context, IMapper mapper)
{
    Context = context;
    Mapper = mapper;
}
public class DomainProfiles : Profile
{
    public void CustomerProfile()
    {
        CreateMap<Customer, CustomerDto>()
            .ForMember(dest => dest.CustomerId, opt => opt.Ignore())
            .ForMember(dest => dest.CreateDate, opt => opt.Ignore())
            .ForMember(dest => dest.UpdateDate, opt => opt.Ignore())
            .ForMember(dest => dest.CustomerName, opt => opt.MapFrom(src => src.CustomerName))
            .ForMember(dest => dest.CustomerShort, opt => opt.MapFrom(src => src.CustomerShort))
            .ForMember(dest => dest.RecordStatus, opt => opt.MapFrom(src => src.RecordStatus));
    }
}
public CustomerService(Context context, IMapper mapper) : base(context, mapper) { }

    protected override DbSet<Customer> EntitySet => Context.Customer;
    protected override Expression<Func<Customer, bool>> SingleEntityPredicate(int id)
    {
        return entity => entity.CustomerId == id;
    }
    public async Task<ServiceDto<CollectionDto<CustomerDto>>> ReadAll(CollectionQueryParametersDto queryParameters)
    {
        var statusCode = HttpStatusCode.OK;
        var errorList = new List<string>();

        // Database work
        var customers = await EntitySet
            .AsNoTracking()
            .ApplyQueryParameters(queryParameters)
            .ToListAsync();

        var dtos = customers.Select(c => Mapper.Map<CustomerDto>(c));

        // Create JSON objects
        return dtos
            .WrapInCollectionResponse(statusCode, errorList);
    }
}
我在BaseService类中使用依赖项注入集:Project.Service BaseService.cs

public void ConfigureServices(IServiceCollection services)
{
    ....
    services.AddAutoMapper();
    ....
}
protected readonly Context Context;
protected readonly IMapper Mapper;
protected BaseService(Context context, IMapper mapper)
{
    Context = context;
    Mapper = mapper;
}
public class DomainProfiles : Profile
{
    public void CustomerProfile()
    {
        CreateMap<Customer, CustomerDto>()
            .ForMember(dest => dest.CustomerId, opt => opt.Ignore())
            .ForMember(dest => dest.CreateDate, opt => opt.Ignore())
            .ForMember(dest => dest.UpdateDate, opt => opt.Ignore())
            .ForMember(dest => dest.CustomerName, opt => opt.MapFrom(src => src.CustomerName))
            .ForMember(dest => dest.CustomerShort, opt => opt.MapFrom(src => src.CustomerShort))
            .ForMember(dest => dest.RecordStatus, opt => opt.MapFrom(src => src.RecordStatus));
    }
}
public CustomerService(Context context, IMapper mapper) : base(context, mapper) { }

    protected override DbSet<Customer> EntitySet => Context.Customer;
    protected override Expression<Func<Customer, bool>> SingleEntityPredicate(int id)
    {
        return entity => entity.CustomerId == id;
    }
    public async Task<ServiceDto<CollectionDto<CustomerDto>>> ReadAll(CollectionQueryParametersDto queryParameters)
    {
        var statusCode = HttpStatusCode.OK;
        var errorList = new List<string>();

        // Database work
        var customers = await EntitySet
            .AsNoTracking()
            .ApplyQueryParameters(queryParameters)
            .ToListAsync();

        var dtos = customers.Select(c => Mapper.Map<CustomerDto>(c));

        // Create JSON objects
        return dtos
            .WrapInCollectionResponse(statusCode, errorList);
    }
}
我正在一个独立类中设置AutoMapper:Project.Api DomainProfile.cs

public void ConfigureServices(IServiceCollection services)
{
    ....
    services.AddAutoMapper();
    ....
}
protected readonly Context Context;
protected readonly IMapper Mapper;
protected BaseService(Context context, IMapper mapper)
{
    Context = context;
    Mapper = mapper;
}
public class DomainProfiles : Profile
{
    public void CustomerProfile()
    {
        CreateMap<Customer, CustomerDto>()
            .ForMember(dest => dest.CustomerId, opt => opt.Ignore())
            .ForMember(dest => dest.CreateDate, opt => opt.Ignore())
            .ForMember(dest => dest.UpdateDate, opt => opt.Ignore())
            .ForMember(dest => dest.CustomerName, opt => opt.MapFrom(src => src.CustomerName))
            .ForMember(dest => dest.CustomerShort, opt => opt.MapFrom(src => src.CustomerShort))
            .ForMember(dest => dest.RecordStatus, opt => opt.MapFrom(src => src.RecordStatus));
    }
}
public CustomerService(Context context, IMapper mapper) : base(context, mapper) { }

    protected override DbSet<Customer> EntitySet => Context.Customer;
    protected override Expression<Func<Customer, bool>> SingleEntityPredicate(int id)
    {
        return entity => entity.CustomerId == id;
    }
    public async Task<ServiceDto<CollectionDto<CustomerDto>>> ReadAll(CollectionQueryParametersDto queryParameters)
    {
        var statusCode = HttpStatusCode.OK;
        var errorList = new List<string>();

        // Database work
        var customers = await EntitySet
            .AsNoTracking()
            .ApplyQueryParameters(queryParameters)
            .ToListAsync();

        var dtos = customers.Select(c => Mapper.Map<CustomerDto>(c));

        // Create JSON objects
        return dtos
            .WrapInCollectionResponse(statusCode, errorList);
    }
}
公共类域配置文件:配置文件
{
public void CustomerProfile()
{
CreateMap()
.FormMember(dest=>dest.CustomerId,opt=>opt.Ignore())
.FormMember(dest=>dest.CreateDate,opt=>opt.Ignore())
.FormMember(dest=>dest.UpdateDate,opt=>opt.Ignore())
.FormMember(dest=>dest.CustomerName,opt=>opt.MapFrom(src=>src.CustomerName))
.FormMember(dest=>dest.customersort,opt=>opt.MapFrom(src=>src.customersort))
.ForMember(dest=>dest.RecordStatus,opt=>opt.MapFrom(src=>src.RecordStatus));
}
}
并在我的服务中调用它:Project.service CustomerService.cs

public void ConfigureServices(IServiceCollection services)
{
    ....
    services.AddAutoMapper();
    ....
}
protected readonly Context Context;
protected readonly IMapper Mapper;
protected BaseService(Context context, IMapper mapper)
{
    Context = context;
    Mapper = mapper;
}
public class DomainProfiles : Profile
{
    public void CustomerProfile()
    {
        CreateMap<Customer, CustomerDto>()
            .ForMember(dest => dest.CustomerId, opt => opt.Ignore())
            .ForMember(dest => dest.CreateDate, opt => opt.Ignore())
            .ForMember(dest => dest.UpdateDate, opt => opt.Ignore())
            .ForMember(dest => dest.CustomerName, opt => opt.MapFrom(src => src.CustomerName))
            .ForMember(dest => dest.CustomerShort, opt => opt.MapFrom(src => src.CustomerShort))
            .ForMember(dest => dest.RecordStatus, opt => opt.MapFrom(src => src.RecordStatus));
    }
}
public CustomerService(Context context, IMapper mapper) : base(context, mapper) { }

    protected override DbSet<Customer> EntitySet => Context.Customer;
    protected override Expression<Func<Customer, bool>> SingleEntityPredicate(int id)
    {
        return entity => entity.CustomerId == id;
    }
    public async Task<ServiceDto<CollectionDto<CustomerDto>>> ReadAll(CollectionQueryParametersDto queryParameters)
    {
        var statusCode = HttpStatusCode.OK;
        var errorList = new List<string>();

        // Database work
        var customers = await EntitySet
            .AsNoTracking()
            .ApplyQueryParameters(queryParameters)
            .ToListAsync();

        var dtos = customers.Select(c => Mapper.Map<CustomerDto>(c));

        // Create JSON objects
        return dtos
            .WrapInCollectionResponse(statusCode, errorList);
    }
}
publiccustomerservice(Context-Context,IMapper-mapper):base(Context,mapper){
受保护的覆盖DbSet EntitySet=>Context.Customer;
受保护的重写表达式SingleEntityPredicate(int id)
{
返回实体=>entity.CustomerId==id;
}
公共异步任务ReadAll(CollectionQueryParametersTo queryParameters)
{
var statusCode=HttpStatusCode.OK;
var errorList=新列表();
//数据库工作
var客户=等待实体集
.AsNoTracking()
.ApplyQueryParameters(查询参数)
.ToListAsync();
var dtos=customers.Select(c=>Mapper.Map(c));
//创建JSON对象
返回DTO
.WrapInCollectionResponse(状态代码、错误列表);
}
}

我的问题是我的DomainProfile没有设置为构造函数。为了解决这个问题,我必须将CustomerProfile方法名更改为DomainProfiles,以匹配类名,并删除void,它立即起作用

来自

public class DomainProfiles : Profile
{
    public void CustomerProfile()
    {
        CreateMap<Customer, CustomerDto>()
            .ForMember(dest => dest.CustomerId, opt => opt.Ignore())
            .ForMember(dest => dest.CreateDate, opt => opt.Ignore())
            .ForMember(dest => dest.UpdateDate, opt => opt.Ignore())
            .ForMember(dest => dest.CustomerName, opt => opt.MapFrom(src => src.CustomerName))
            .ForMember(dest => dest.CustomerShort, opt => opt.MapFrom(src => src.CustomerShort))
            .ForMember(dest => dest.RecordStatus, opt => opt.MapFrom(src => src.RecordStatus));
    }
}
公共类域配置文件:配置文件
{
公共void CustomerProfile()
{
CreateMap()
.FormMember(dest=>dest.CustomerId,opt=>opt.Ignore())
.FormMember(dest=>dest.CreateDate,opt=>opt.Ignore())
.FormMember(dest=>dest.UpdateDate,opt=>opt.Ignore())
.FormMember(dest=>dest.CustomerName,opt=>opt.MapFrom(src=>src.CustomerName))
.FormMember(dest=>dest.customersort,opt=>opt.MapFrom(src=>src.customersort))
.ForMember(dest=>dest.RecordStatus,opt=>opt.MapFrom(src=>src.RecordStatus));
}
}

public class DomainProfiles : Profile
{
    public DomainProfiles()
    {
        CreateMap<Customer, CustomerDto>()
            .ForMember(dest => dest.CustomerId, opt => opt.Ignore())
            .ForMember(dest => dest.CreateDate, opt => opt.Ignore())
            .ForMember(dest => dest.UpdateDate, opt => opt.Ignore())
            .ForMember(dest => dest.CustomerName, opt => opt.MapFrom(src => src.CustomerName))
            .ForMember(dest => dest.CustomerShort, opt => opt.MapFrom(src => src.CustomerShort))
            .ForMember(dest => dest.RecordStatus, opt => opt.MapFrom(src => src.RecordStatus));
    }
}
公共类域配置文件:配置文件
{
公共域配置文件()
{
CreateMap()
.FormMember(dest=>dest.CustomerId,opt=>opt.Ignore())
.FormMember(dest=>dest.CreateDate,opt=>opt.Ignore())
.FormMember(dest=>dest.UpdateDate,opt=>opt.Ignore())
.FormMember(dest=>dest.CustomerName,opt=>opt.MapFrom(src=>src.CustomerName))
.FormMember(dest=>dest.customersort,opt=>opt.MapFrom(src=>src.customersort))
.ForMember(dest=>dest.RecordStatus,opt=>opt.MapFrom(src=>src.RecordStatus));
}
}

第二个代码块中的
客户是什么?它是用
var
声明的,所以我们不能确定。映射配置是正确的。我们可以看看您是如何初始化配置的吗?Mapper.Initialize method?@ps2goat,customers是一个模型列表。@CodeNotFound我已经在初始化的地方添加了我的startup.cs和我的DID基本服务。您是否将配置文件定义到与startup.cs文件相同的项目中?