C# 使用继承自动映射展平对象
我有一个带有属性的模型,我需要映射到抽象类ClassAModel中的实体,ClassBModel与ClassA和ClassB是一对一的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
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)});