Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自动映射和类层次结构_C#_Automapper_Derived - Fatal编程技术网

C# 自动映射和类层次结构

C# 自动映射和类层次结构,c#,automapper,derived,C#,Automapper,Derived,鉴于以下来源: public class SourceBase { public string TheString { get; set; } } public class SourceDerived : SourceBase { } 及目的地: public class DestBase { public string MyString { get; set; } } public class DestDerived : DestBase { } 这个映射: CreateMap<

鉴于以下来源:

public class SourceBase { public string TheString { get; set; } }
public class SourceDerived : SourceBase { }
及目的地:

public class DestBase { public string MyString { get; set; } }
public class DestDerived : DestBase { }
这个映射:

  CreateMap<SourceBase, DestBase>()
    .ForMember(dest => dest.MyString, o => o.MapFrom(x => x.TheString))
    .Include<SourceDerived, DestDerived>();

  CreateMap<SourceDerived, DestDerived>();
  Mapper.AssertConfigurationIsValid();  // Exception is thrown here
CreateMap()
.ForMember(dest=>dest.MyString,o=>o.MapFrom(x=>x.TheString))
.Include();
CreateMap();
Mapper.AssertConfiguration验证();//这里抛出异常
但是,这会产生一个映射错误,表示MyString未映射到dest上。有什么好处?我真的需要在所有派生类型中重复基类属性的映射吗(我的实际代码中有不止一个子类)

编辑:

确切的例外情况是无法映射DestDevertive上的以下1属性:MyString。添加自定义映射表达式、忽略或重命名destDestDerivated上的属性。

请查看此帖子:

如果您在下面的代码中声明它(使用AutoMapper 1.1.0.188),那么它可以正常工作。我不确定这是否解决了你的问题

var result = Mapper.CreateMap<SourceBase, DestBase>()
                .ForMember(dest => dest.MyString, o => o.MapFrom(x => x.TheString));
               //.Include<SourceDerived, DestDerived>();
            Mapper.CreateMap<SourceDerived, DestDerived>();
            var source = new SourceDerived();
            var destDerived = new DestDerived();
            source.TheString = "teststring";
            var mapResult = Mapper.Map<SourceBase, DestBase>(source, destDerived).MyString;
            Console.WriteLine(mapResult);
var result=Mapper.CreateMap()
.ForMember(dest=>dest.MyString,o=>o.MapFrom(x=>x.TheString));
//.Include();
CreateMap();
var source=new SourceDerived();
var destDelivered=新destDelivered();
source.TheString=“teststring”;
var mapreult=Mapper.Map(source,destDestevered).MyString;
Console.WriteLine(mapResult);

确切的错误是什么?不,这不适用于我们。如果调用Mapper.Map(source、typeof(SourceDerived)、typeof(DestDerived)),那么示例代码就会失败,这真的很奇怪。没有异常,但也没有进行映射。我们还调用了
Mapper.assertconfigurationsvalid()
。我想你会发现,如果你在设置映射后立即添加该调用,你会得到我文章中提到的异常。谢谢你的评论。对不起,我帮不了什么忙!没问题,我不知道为什么您的示例有效,但其他对Map的调用无效!