Код Первый
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
ожидаете ли сопоставления после выполнения неожиданного сопоставления?