AutoMapper映射嵌套的List对象未正确映射

时间:2017-11-30 07:42:43

标签: c# automapper

我需要将DTOs对象映射到我的实体对象中。将DTO对象映射到具有一对多关系的Entity对象中它不起作用。但是当将单个DTO对象映射到单个Entity对象时,它的工作正常。

实体 -

public class EntityClass   
{

    [Key]
    public int Id { get; set; }

    public decimal MonthlyPricing { get; set; }

    public virtual IEnumerable<DynamicField> DynamicFields { get; set; }
}


public class DynamicField
{

    public int Id { get; set; }
    [ForeignKey("Service")]
    public int ServiceId { get; set; }

    public virtual Service Service { get; set; }
}

我的DTO在下面,

public class DTO_Object
{

    public int Id { get; set; }  

    [Required]
    public decimal MonthlyPricing { get; set; }

    public IEnumerable<DynamicFieldForm> DynamicFields { get; set; }
}

public class DynamicFieldForm
{

    public int Id { get; set; }

    public int ServiceId { get; set; }
}

我的地图位于下方,

var config = new MapperConfiguration(cfg => cfg.CreateMap<DTO_Object, 
EntityClass>().ForMember(s => s.DynamicFields,o => o.MapFrom(s => 
s.DynamicFields.Select(m => m.Id))));

IMapper imapper = config.CreateMapper();

var service = imapper.Map<DTO_Object, EntityClass>(sourse);

1 个答案:

答案 0 :(得分:0)

Auto Mapper不是个好习惯!最好是手动构建DBContext以链接模型的数据,这些数据被封装到类模型中。

再次手动构建您的实体上下文不要使用AutoMapper它是一个非常好的  坏习惯你可以在网络资源上查看这个为什么写得更好  您手动实体上下文。

如果您希望为您生成实体数据类,您可以从数据库中执行代码优先,当您创建模型时,还将创建实体DataContext并行并使用正确的映射进行校正(添加模型,删除某些内容,编辑)。

P.S。例如,当我为企业应用程序(WebAPI或Web后端)构建一些东西时,我不使用自动映射。我自己编码。