Простое условие с ProjectTo не работает - PullRequest
0 голосов
/ 27 марта 2020

У меня проблема с ProjectTo. У меня есть карта выбора:

var posts = await appContext.Posts
    .Select(x => new PostListReadModel()
    {
        IsAnonymous = x.IsAnonymous,
        Publisher = !x.IsAnonymous ?
            new PostPublisherReadModel()
            {
                Id = x.PublisherId,
                Nick = x.Publisher.Nick,
                PhoneNumber = x.Publisher.PhoneNumber,
                Avatar = x.Publisher.Avatar
            } :
            null
    })
    .ToListAsync();

Как видите, у меня есть условие сопоставления для свойства Publisher. Очень простое условие. Это переводится как sql так:

SELECT p.IsAnonymous, NOT (p.IsAnonymous), p.PublisherId, u.Nick, u.PhoneNumber, i.Id, i.DateCreated, i.DateUpdated, i.FileName
      FROM posts AS p
      INNER JOIN users AS u ON p.PublisherId = u.Id
      LEFT JOIN images AS i ON u.AvatarId = i.Id

И это работает.

Теперь я хочу использовать ProjectTo. И у меня есть конфигурация карты, подобная этой:

CreateMap<User, PostPublisherReadModel>();

CreateMap<Post, PostListReadModel>()
    .ForMember(dest => dest.IsAnonymous, opt => opt.MapFrom(src => src.IsAnonymous))
    .ForMember(dest => dest.Publisher, opt => opt.Condition(src => !src.IsAnonymous))
    .ForAllOtherMembers(opt => opt.Ignore());

Она переводится в sql следующим образом:

SELECT p.IsAnonymous, FALSE, i.Id, i.DateCreated, i.DateUpdated, i.FileName, u.Id, u.Nick, u.PhoneNumber
      FROM posts AS p
      INNER JOIN users AS u ON p.PublisherId = u.Id
      LEFT JOIN images AS i ON u.AvatarId = i.Id

и, естественно, не работает.

Это ошибка автомата или я делаю что-то не так? PS: DbProvider: Pomelo.EntityFrameworkCore. MySql Версия = 3.1.0

...