AutoMapper не может сопоставить ссылку или использовать UseDestinationValue - PullRequest
1 голос
/ 15 июня 2019

Код Первый

class Woman
{
    public string Name { get; set; }
}
class Family
{
    public string SweetName { get; set; }
    public Woman Wife { get; set; }
}
class MyProfile : Profile
{
    public MyProfile()
    {
        CreateMap<Woman, Woman>();
        CreateMap<Family, Family>()
            .ForMember(d => d.Wife, o => o.UseDestinationValue());
    }
}
class Program
{
    static void main()
    {
        // Initialize
        var ce = new MapperConfigurationExpression();
        ce.AddProfile(new MyProfile());
        var mapper = new MapperConfiguration(ce).CreateMapper();

        var oldWoman = new Woman { Name = "Alice" };
        var newWoman = mapper.Map<Woman>(oldWoman);
        Console.WriteLine($"oldWoman.Equals(newWoman) : {oldWoman.Equals(newWoman)}");
        // false 

        var oldFamily = new Family { SweetName = "family one", Wife = oldWoman };
        var newFamily = mapper.Map<Family>(oldFamily);
        Console.WriteLine($"oldFamily.Equals(newFamily) : {oldFamily.Equals(newFamily)}"); 
        // false

        Console.WriteLine($"oldFamily.Wife.Equals(newFamily.Wife) : {oldFamily.Wife.Equals(newFamily.Wife)}"); 
        // false
        // here i wanna reference of oldfamily.wife pass to newfamily.wife's
    }
}

Я установил UseDestinationValue (), он не работает?

если я не создаю женскую карту, ссылка на две жены равна.

как это:

class MyProfile : Profile
{
    public MyProfile()
    {
        //CreateMap<Woman, Woman>();
        CreateMap<Family, Family>();
        //.ForMember(d => d.Wife, o => o.UseDestinationValue());
    }
}

PS. не нужно создавать женскую карту, и UseDestinationValue не требуется. ссылка на две жены равна без создания карты женщины и использования метода UseDestinationValue.

Как передать ссылку в этом случае с помощью создания карты класса женщины?

Обновлено 1

Странный способ решить эту проблему:

class MyProfile : Profile
{
    public MyProfile()
    {
        CreateMap<Woman, Woman>();
        CreateMap<Family, Family>()
            .AfterMap((s, d) => d.Wife = s.Wife);
    }
}

это работает, но это не окончательный путь, очевидно.

это было сопоставлено. XD

ожидаете ли сопоставления после выполнения неожиданного сопоставления?

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