合并 - 使用 AutoMapper 进行映射

Merge - Mapping with AutoMapper

我在 AutoMapper 中遇到转换问题。以下是详细信息。

这是我的来源class

public class FamilyModel
{
    public int FamilyID { get; set; }
    public string FamilyName { get; set; }
}

这是我的目的地class

public class SaveKitViewModel
{
    public int FamilyID { get; set; }
    public string FamilyName { get; set; }
    public int UserId { get; set; }
}

现在,当我尝试使用 Automapper 将源对象转换为目标对象时,出现错误,我试图忽略 UserId 对象,因为它不存在于源 class

var mapper = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<FamilyModel, SaveKitViewModel>()
        .ForMember(d => d.UserId, m => m.Ignore());
    }).CreateMapper();
   dbObject = mapper.Map(model, dbObject);
}

谁能告诉我上面的代码有什么问题吗?

试试这个:

Mapper.Initialize(cfg => {
   cfg.CreateMap<FamilyModel, SaveKitViewModel>();
});

SaveKitViewModel sktv = new SaveKitViewModel();
FamilyModel fm = Mapper.Map<FamilyModel>(sktv.OfType<SaveKitViewModel>());

由于 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