我无法使用AutoMapper在具有多对多关系的DAO和DTO对象之间创建正确的映射。 现在我可以映射这些多对多属性,但其他属性为null。
正确的映射是什么?我看到那些型号'属性具有相同的名称和类型。 我也试图在父模型和#34; ClaseFabricante"之间创建映射。和" ClaseConstructor"。我应该与那些与多对多相关的孩子一起制作" ReferenciaFabricante"和" ReferenciaConstructor"与ForMember()?
实体:
[Table("ReferenciasFabricante", Schema = "public")]
public class ReferenciaFabricante
{
public string NombreFabricante { get; set; }
public string RefFabricanteIA { get; set; }
[InverseProperty("ReferenciaFabricante")]
public virtual ClaseFabricante Clase { get; set; }
[InverseProperty("ReferenciaFabricante")]
public virtual IList<ReferenciaFabricanteTieneReferenciaConstructor> MontaReferenciasConstructor { get; set; }
}
[Table("ReferenciasConstructor", Schema = "public")]
public class ReferenciaConstructor
{
public string Referencia { get; set; }
public string NombreConstructor { get; set; }
[InverseProperty("ReferenciaConstructor")]
public virtual ClaseConstructor Clase { get; set; }
[InverseProperty("ReferenciaConstructor")]
public virtual IList<ReferenciaFabricanteTieneReferenciaConstructor> MontadaPorReferenciasFabricante { get; set; }
}
[Table("ReferenciaFabricanteTieneReferenciaConstructor", Schema = "public")]
public class ReferenciaFabricanteTieneReferenciaConstructor {
[Key]
public int IdReferenciaFabricante { get; set; }
[ForeignKey("IdReferenciaFabricante")]
public ReferenciaFabricante ReferenciaFabricante { get; set; }
[Key]
public int IdReferenciaConstructor { get; set; }
[ForeignKey("IdReferenciaConstructor")]
public ReferenciaConstructor ReferenciaConstructor { get; set; }
}
[Table("ClasesFabricante", Schema = "public")]
public class ClaseFabricante
{
public int? IdReferenciaFabricante { get; set; }
[ForeignKey("IdReferenciaFabricante")]
public ReferenciaFabricante ReferenciaFabricante { get; set; }
}
[Table("ClasesConstructor", Schema = "public")]
public class ClaseConstructor
{
public int? IdReferenciaConstructor { get; set; }
[ForeignKey("IdReferenciaConstructor")]
public ReferenciaConstructor ReferenciaConstructor { get; set; }
}
的ViewModels:
public class ReferenciaFabricante {
public string NombreFabricante { get; set; }
public string RefFabricanteIA { get; set; }
public virtual ClaseFabricante Clase { get; set; }
public virtual IList<ReferenciaConstructor> ReferenciasConstructor { get; set; }
}
public class ReferenciaConstructor {
public string Referencia { get; set; }
public string NombreConstructor { get; set; }
public virtual ClaseConstructor Clase { get; set; }
public virtual IList<ReferenciaFabricante> ReferenciasFabricante { get; set; }
}
public class ClaseFabricante {
public ReferenciaFabricante ReferenciaFabricante { get; set; }
}
public class ClaseConstructor {
public ReferenciaConstructor ReferenciaConstructor { get; set; }
}
映射器初始化:
Mapper.Initialize((config) => {
config.CreateMap<ApplicationCore.Entities.ReferenciaFabricante, ApplicationCore.ViewModels.ReferenciaFabricante>()
;
config.CreateMap<ApplicationCore.Entities.ReferenciaConstructor, ApplicationCore.ViewModels.ReferenciaConstructor>()
;
config.CreateMap<ApplicationCore.Entities.ClaseFabricante, ApplicationCore.ViewModels.ClaseFabricante>()
.ForPath(dto => dto.ReferenciaFabricante.ReferenciasConstructor, opt => opt.MapFrom(x => x.ReferenciaFabricante.MontaReferenciasConstructor.Select(y => y.ReferenciaConstructor).ToList()))
.ForPath(dto => dto.ReferenciaFabricante.VersionesVehiculo, opt => opt.MapFrom(x => x.ReferenciaFabricante.MontaVersionesVehiculo.Select(y => y.VersionVehiculo).ToList()))
;
config.CreateMap<ApplicationCore.Entities.ClaseConstructor, ApplicationCore.ViewModels.ClaseConstructor>()
.ForPath(dto => dto.ReferenciaConstructor.ReferenciasFabricante, opt => opt.MapFrom(x => x.ReferenciaConstructor.MontadaPorReferenciasFabricante.Select(y => y.ReferenciaFabricante).ToList()))
;
});
代码:
foreach (ApplicationCore.Entities.ClaseFabricante cfDAO in vClasesFabricante) {
result.Add(AutoMapper.Mapper.Map<ApplicationCore.ViewModels.ClaseFabricante>(cfDAO));
}