C# AutoMapper无法映射引用或使用UseDestinationValue

C# AutoMapper无法映射引用或使用UseDestinationValue,c#,automapper,C#,Automapper,先编码 女学生 { 公共字符串名称{get;set;} } 阶级家庭 { 公共字符串名称{get;set;} 公共女性妻子{get;set;} } 类别MyProfile:Profile { 公共MyProfile() { CreateMap(); CreateMap() .ForMember(d=>d.layer,o=>o.UseDestinationValue()); } } 班级计划 { 静态void main() { //初始化 var ce=新的MapperConfigurationE

先编码

女学生
{
公共字符串名称{get;set;}
}
阶级家庭
{
公共字符串名称{get;set;}
公共女性妻子{get;set;}
}
类别MyProfile:Profile
{
公共MyProfile()
{
CreateMap();
CreateMap()
.ForMember(d=>d.layer,o=>o.UseDestinationValue());
}
}
班级计划
{
静态void main()
{
//初始化
var ce=新的MapperConfigurationExpression();
ce.AddProfile(新的MyProfile());
var mapper=新的MapperConfiguration(ce).CreateMapper();
var oldWoman=新女性{Name=“Alice”};
var newWoman=mapper.Map(oldWoman);
Console.WriteLine($“oldWoman.Equals(newWoman):{oldWoman.Equals(newWoman)});
//假的
var oldFamily=新家庭{SweetName=“一家”,妻子=老妇人};
var newFamily=mapper.Map(oldFamily);
Console.WriteLine($“oldFamily.Equals(newFamily):{oldFamily.Equals(newFamily)}”);
//假的
Console.WriteLine($“oldFamily.fixer.Equals(newFamily.fixer):{oldFamily.fixer.Equals(newFamily.fixer)}”);
//假的
//这是我想要的旧家庭的证明。妻子证给新家庭。妻子的
}
}
我已设置UseDestinationValue(),它不起作用

如果我不创建女性地图,两个妻子的参考是相等的

像这样:

class MyProfile : Profile
{
    public MyProfile()
    {
        //CreateMap<Woman, Woman>();
        CreateMap<Family, Family>();
        //.ForMember(d => d.Wife, o => o.UseDestinationValue());
    }
}
class MyProfile:Profile
{
公共MyProfile()
{
//CreateMap();
CreateMap();
//.ForMember(d=>d.layer,o=>o.UseDestinationValue());
}
}
注:无需创建女性地图和UseDestinationValue。两个妻子的引用是相等的,无需创建Women map并使用UseDestinationValue方法

在这种情况下,如何使用create a map of woman class传递引用?

更新1

解决这个问题的奇怪方法是:

class MyProfile : Profile
{
    public MyProfile()
    {
        CreateMap<Woman, Woman>();
        CreateMap<Family, Family>()
            .AfterMap((s, d) => d.Wife = s.Wife);
    }
}
class MyProfile:Profile
{
公共MyProfile()
{
CreateMap();
CreateMap()
.AfterMap((s,d)=>d.妻子=s.妻子);
}
}
这是可行的,但显然这不是最终的方法

它已被映射。XD


执行意外映射后是否需要映射?

为什么要为同一个类创建映射?是否要执行深度克隆?@CamiloTerevinto im没有为同一类创建映射。实际上,我想执行一个浅层克隆。@Byebye当您使用
ResolveUsing()
时,它是否工作?@Progman否,这似乎取决于是否使用CreateMap();或者不可以。@ByByeBye您可以使用
Ignore()
调用来阻止映射
Family.Wife
属性,然后使用
AfterMap()
通过使用原始对象实例来“修复”映射。这样它就不会被AutoMapper映射。为什么要为同一个类创建映射?是否要执行深度克隆?@CamiloTerevinto im没有为同一类创建映射。实际上,我想执行一个浅层克隆。@Byebye当您使用
ResolveUsing()
时,它是否工作?@Progman否,这似乎取决于是否使用CreateMap();或者不可以。@ByByeBye您可以使用
Ignore()
调用来阻止映射
Family.Wife
属性,然后使用
AfterMap()
通过使用原始对象实例来“修复”映射。这样它就不会被AutoMapper映射。