Свойство AutoMapper unmapped с помощью сопоставления выражений - PullRequest
0 голосов
/ 16 октября 2019

Я пытаюсь отобразить бизнес-объекты на персистентные объекты с помощью сопоставления выражений.

Мне удалось упростить задачу до этого простого использования AutoMapper.

Классы для сопоставления:

public class X
{
    public X(string name) => this.Name = name;

    public string Name { get; }
}

public class Y
{
    public string Name { get; set; }
}

Эти классы очень просты, но показывают проблему. Х неизменен. Это не проблема для AutoMapper. Я создал карту наподобие

var mapperConfig = new MapperConfiguration(
    cfg => 
    {
        cfg.CreateMap<X, Y>().ReverseMap();
    }); 
var mapper = mapperConfig.CreateMapper();

. В этом случае все работает как положено:

var yInstances = new List<Y> { new Y { Name = "Foo" } }; // Just to have some instances.
var xInstances = yInstances.Select(mapper.Map<X>).ToList();

Как и ожидалось, я получил список X -Instances.

Но я попытался использовать его как IQueryable<T>, используя сопоставление выражений:

Expression<Func<X, bool>> filter = item => item.Name == "Foo";

// this line thows exception
yInstances.AsQueryable().Where(mapper.MapExpression<Expression<Func<Y, bool>>>(filter)).ToList();

В последней строке выдается исключение, содержащее это сообщение:

Unhandled exception. AutoMapper.AutoMapperConfigurationException: 
Unmapped members were found. Review the types and members below.
Add a custom mapping expression, ignore, add a custom resolver, or modify the source/destination type
For no matching constructor, add a no-arg ctor, add optional arguments, or map all of the constructor parameters
=======
Y -> X (None member list)
Y -> X (None member list)

Unmapped properties:
Name

Не существует несопоставленного свойства, поскольку mapper.Map<X> работает.

Я пытался добавить .ForCtorParam("name", opt => opt.MapFrom(src => src.Name)). Но это не работает - не удивительно.

Что я делаю не так? Я уверен, что это только один шаг, но я не могу его найти. Извините.

Код на .Net Fiddle , который иллюстрирует проблему.

...