Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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 - Fatal编程技术网

C# 使用继承自动映射展平对象

C# 使用继承自动映射展平对象,c#,automapper,C#,Automapper,我有一个带有属性的模型,我需要映射到抽象类ClassAModel中的实体,ClassBModel与ClassA和ClassB是一对一的 public class Model { public int Number { get; set; } public ClassAModel ClassAModel { get; set; } public ClassBModel ClassBModel { get; set; } } public abstract class Ab

我有一个带有属性的模型,我需要映射到抽象类ClassAModel中的实体,ClassBModel与ClassA和ClassB是一对一的

public class Model
{
    public int Number { get; set; }
    public ClassAModel ClassAModel { get; set; }
    public ClassBModel ClassBModel { get; set; }
}

public abstract class AbstractClass
{
    public int Number { get; set; }
}

public class ClassA : AbstractClass
{

}

public class ClassB : AbstractClass {

}

我不知道如何告诉automapper从ClassAModel属性映射ClassA

此答案假定您正试图使用
ClassAModel
中的属性和
Model
中的数字属性将
Model
映射到
ClassA

CreateMap<Model, ClassA>()
    .ConstructProjectionUsing(x => new ClassA(){Name = x.ModelClassA.Name, Number = x.Number});
希望这些都有帮助

要减少手动映射,您可以改为执行类似操作(未测试的代码):

CreateMap()
.ConstructProjectionUsing(x=>Mapper.Map(x.ModelClassA))
.ForMember(x=>x.Number,y=>y.MapFrom(src=>src.Number));
CreateMap()
.ConstructProjectionUsing(x=>Mapper.Map(x.ClassBModel))
.ForMember(x=>x.Number,y=>y.MapFrom(src=>src.Number));
CreateMap().ConstructProjectionUsing(x=>new{A=Mapper.Map(x),B=Mapper.Map(x)});

因此,是否要使用
ClassAModel
中的属性和
Model
中的数字将
Model
映射到
ClassA
。也许看看
ConstructionProjectionUsing
这个映射没有自动功能。
CreateMap<Model, dynamic>()
                .ConstructProjectionUsing(x =>  new { A = new ClassA() { Name = x.ModelClassA.Name, Number = x.Number },
                    B = new ClassB() { Department  = x.ModelClassA.Name, Number = x.Number }});
CreateMap<Model, ClassA>()
    .ConstructProjectionUsing(x => Mapper.Map<ClassA>(x.ModelClassA))
    .ForMember(x => x.Number, y => y.MapFrom(src => src.Number));

CreateMap<Model, ClassB>()
    .ConstructProjectionUsing(x => Mapper.Map<ClassB>(x.ClassBModel))
    .ForMember(x => x.Number, y => y.MapFrom(src => src.Number));

CreateMap<Model, dynamic>().ConstructProjectionUsing(x => new {A = Mapper.Map<Model, ClassA>(x), B = Mapper.Map<Model, ClassB>(x)});