我在AutoMapper中遇到了投射问题。以下是详细信息。
这是我的源类
public class FamilyModel
{
public int FamilyID { get; set; }
public string FamilyName { get; set; }
}
这是我的目的地课程
public class SaveKitViewModel
{
public int FamilyID { get; set; }
public string FamilyName { get; set; }
public int UserId { get; set; }
}
现在,当我尝试使用Automapper将源对象关闭到目标对象时,它给了我错误,我试图忽略UserId对象,因为它在Source类中不存在
var mapper = new MapperConfiguration(cfg =>
{
cfg.CreateMap<FamilyModel, SaveKitViewModel>()
.ForMember(d => d.UserId, m => m.Ignore());
}).CreateMapper();
dbObject = mapper.Map(model, dbObject);
}
任何人都可以告诉我上面的代码有什么问题吗?
答案 0 :(得分:1)
由于UserId
不在源地图中,因此您不需要在映射引导中明确.Ignore
它 - 默认情况下它将被忽略。
看起来您希望将映射的源属性合并到现有的目标对象中。您不需要重新分配目标对象 - 现有属性将被突变。例如:
var mapper = new MapperConfiguration(cfg =>
{
cfg.CreateMap<FamilyModel, SaveKitViewModel>();
}).CreateMapper();
var existingSaveKitViewModel = new SaveKitViewModel
{
UserId = 1234
};
var familyModel = new FamilyModel
{
FamilyID = 9876,
FamilyName = "Bloggs"
};
mapper.Map(familyModel, existingSaveKitViewModel);
合并existingSaveKitViewModel
:
FamilyID = 9876,
FamilyName = "Bloggs"
UserId = 1234
答案 1 :(得分:0)
试试这个:
Mapper.Initialize(cfg => {
cfg.CreateMap<FamilyModel, SaveKitViewModel>();
});
SaveKitViewModel sktv = new SaveKitViewModel();
FamilyModel fm = Mapper.Map<FamilyModel>(sktv.OfType<SaveKitViewModel>());