Проблема при копировании данных из одного объекта в другой с использованием Automapper для приложения asp.net core 2.2 - PullRequest
0 голосов
/ 30 октября 2019

Я использую пакет numa Automapper: AutoMapper.Extensions.Microsoft.DependencyInjection для основного приложения asp.net.

Вот мой объект домена:

Laguages.cs

public class Languages
{
    public string id
    {
        get;
        set;
    }

    public int LanguageId
    {
        get;
        set;
    }

    public string Name
    {
        get;
        set;
    }

    public string NameinEnglish
    {
        get;
        set;
    }

    public string LocalisationIdentifier
    {
        get;
        set;
    }

    public string Locale
    {
        get;
        set;
    }

    public bool RightToLeft
    {
        get;
        set;
    }
}

Вот мой объект DTO:

LanguageDTO.cs

public class LanguageDTO
{
    public string id
    {
        get;
        set;
    }

    public int LanguageId
    {
        get;
        set;
    }

    public string Name
    {
        get;
        set;
    }

    public string NameinEnglish
    {
        get;
        set;
    }

    public string LocalisationIdentifier
    {
        get;
        set;
    }

    public string Locale
    {
        get;
        set;
    }

    public bool RightToLeft
    {
        get;
        set;
    }
}

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    // Auto Mapper Configurations
    var mappingConfig = new MapperConfiguration(mc =>
    {
        mc.AddProfile(new MappingProfile());
    }

    );
    IMapper mapper = mappingConfig.CreateMapper();
    services.AddSingleton(mapper);
}

MappingProfile.cs

public class MappingProfile : Profile
{
    public MappingProfile()
    {
        CreateMap<Languages, LanguageDTO>();
        CreateMap<List<Languages>, List<LanguageDTO>>();
    }
}

CommonService.cs

public async Task<LanguageDTO> GetLanguagesByFilterAsync(string[] filters)
{
    try
    {
        if (filters.Length > 0)
        {
            var languages = new List<Languages>();
            var s = filters.First(); // requred by EF
            var query = _dbContext.Languages.Where(v => v.LocalisationIdentifier.Contains(s));
            foreach (var item in filters.Where(v => v != filters[0]).Distinct())
            {
                query = query.Union(_dbContext.Languages.Where(v => v.LocalisationIdentifier.Contains(item)));
            }

            languages = await query.ToListAsync();
            var languagesList = _mapper.Map<List<Languages>, List<LanguageDTO>>(languages);
            foreach (var filter in filters)
            {
                var lang = languagesList.FirstOrDefault(l => l.LocalisationIdentifier.Split(',').Any(i => i.Equals(filter, StringComparison.OrdinalIgnoreCase)));
                if (lang != null)
                {
                    lang.LocalisationIdentifier = lang.Locale ?? filter;
                    return lang;
                }
            }
        }

        return null;
    }
    catch (Exception ex)
    {
        return null;
    }
}

Здесь, в вышеупомянутом методепри отладке я всегда получаю значение счетчика languagesList 0. Короче говоря, данные не копируются с исходных языков.

Может кто-нибудь помочь мне решить эту проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...