AutoMapper Ignore () не работает - PullRequest
0 голосов
/ 06 июня 2018

AutoMapper продолжает выдавать ошибку, в которой говорится, что у меня есть несопоставленные свойства (CustomerId, CreateDate, UpdateDate).Я пытаюсь получить результаты из моей базы данных, но по какой-то причине он считает, что эти поля не установлены.Я просто хочу, чтобы ошибка исчезла на какое-то время, поэтому я попытался установить Ignore () в этих 3 полях, однако я все еще получаю сообщение об ошибке.

В моем файле startup.cs я инициализирую: Project.Api startup.cs

public void ConfigureServices(IServiceCollection services)
{
    ....
    services.AddAutoMapper();
    ....
}

Я использую набор внедрения зависимостей в своем классе BaseService: Project.Service BaseService.cs

protected readonly Context Context;
protected readonly IMapper Mapper;
protected BaseService(Context context, IMapper mapper)
{
    Context = context;
    Mapper = mapper;
}

Я устанавливаю AutoMapper в автономном классе: Project.Api DomainProfile.cs

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));
    }
}

и вызываю его в своем сервисе: Project.Service CustomerService.cs

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);
    }
}

1 Ответ

0 голосов
/ 06 июня 2018

Моя проблема заключалась в том, что мой DomainProfile не был задан как конструктор.Чтобы решить эту проблему, мне пришлось изменить имя метода CustomerProfile на DomainProfiles, чтобы оно совпадало с именем класса и отбросило пустоту, и это мгновенно сработало.

ОТ

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 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));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...