我是Automapper的新手,我已经在这几天苦苦挣扎,我真的很感激任何帮助解决这个问题。此外,我一直试图找到一些可以帮助我的帖子,但我找不到任何类似的情况。
我有这个主要实体:
public partial class cht_cotizacion
{
public cht_cotizacion()
{
this.cht_cotizacion_opcion = new List<cht_cotizacion_opcion>();
}
[DataMember]
public long Id { get; set; }
[DataMember]
public string LocaleId { get; set; }
[DataMember]
public Nullable<int> EstatusId { get; set; }
[DataMember]
public virtual cht_cat_estatus cht_cat_estatus { get; set; }
[DataMember]
public virtual ICollection<cht_cotizacion_opcion> cht_cotizacion_opcion { get; set; }
}
相关实体cht_cat_estatus:
[DataContract(IsReference = true)]
public partial class cht_cat_estatus
{
public cht_cat_estatus()
{
this.cht_cotizacion = new List<cht_cotizacion>();
}
[DataMember]
public int Id { get; set; }
[DataMember]
public string LocaleId { get; set; }
[DataMember]
public string Descripcion { get; set; }
[DataMember]
public virtual ICollection<cht_cotizacion> cht_cotizacion { get; set; }
}
相关实体cht_cotizacion_opcion:
[DataContract(IsReference = true)]
public partial class cht_cotizacion_opcion
{
[DataMember]
public long Id { get; set; }
[DataMember]
public string LocaleId { get; set; }
[DataMember]
public long CotizacionId { get; set; }
[DataMember]
public int TipoOpcionId { get; set; }
[DataMember]
public System.DateTime FechaOpcion { get; set; }
[DataMember]
public virtual cht_cotizacion cht_cotizacion { get; set; }
}
实体cht_cat_status有一个由以下内容组成的复杂主键:“Id”和“LocaleId”,它们在列上的cht_cotizacion上是外来的:“EstatusId” 和“LocaleId”。
DTO课程:
[DataContract()]
public partial class cht_cotizacionDTO
{
public cht_cotizacionDTO()
{
}
[DataMember()]
public Int64 Id { get; set; }
[DataMember()]
public String LocaleId { get; set; }
[DataMember()]
public Nullable<Int32> EstatusId { get; set; }
[DataMember()]
public List<cht_cat_estatusDTO> cht_cat_estatus { get; set; }
[DataMember()]
public List<cht_cotizacion_opcionDTO> cht_cotizacion_opcion { get; set; }
}
[DataContract()]
public partial class cht_cotizacion_opcionDTO
{
public cht_cotizacion_opcionDTO()
{
}
[DataMember()]
public Int64 Id { get; set; }
[DataMember()]
public String LocaleId { get; set; }
[DataMember()]
public Int64 CotizacionId { get; set; }
[DataMember()]
public Int32 TipoOpcionId { get; set; }
[DataMember()]
public DateTime FechaOpcion { get; set; }
[DataMember()]
public Int64 cht_cotizacion_Id { get; set; }
}
[DataContract()]
public partial class cht_cat_estatusDTO
{
public cht_cat_estatusDTO()
{
}
[DataMember()]
public Int32 Id { get; set; }
[DataMember()]
public String LocaleId { get; set; }
[DataMember()]
public String Descripcion { get; set; }
[DataMember()]
public List<Int64> cht_cotizacion_Id { get; set; }
}
然后用法(这很好用):
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<cht_cotizacion, cht_cotizacionDTO>()
//cfg.CreateMap<cht_cat_estatus, cht_cat_estatusDTO>();
cfg.CreateMap<cht_cotizacion_opcion, cht_cotizacion_opcionDTO>();
});
IMapper mapper = config.CreateMapper();
var source = cotizacion;
cotizacionDTO = mapper.Map<cht_cotizacion, cht_cotizacionDTO>(source);
但是,只要我包含其他相关实体:
cfg.CreateMap<cht_cat_estatus, cht_cat_estatusDTO>();
即使使用:
cfg.CreateMap<cht_cotizacion, cht_cotizacionDTO>()
.ForMember(dest => dest.cht_cat_estatus, opt => opt.MapFrom(src => src.cht_cat_estatus));
我最终收到错误:
{"Error mapping types.
Mapping types:
cht_cotizacion -> cht_cotizacionDTO
cht_cotizacion -> cht_cotizacionDTO
Type Map configuration:
cht_cotizacion -> cht_cotizacionDTO
cht_cotizacion -> cht_cotizacionDTO
Property:
cht_cat_estatus"
}