C# 未调用AutoMapper ConvertUsing
我想使用ConvertUsing转换基类的两个属性,但没有调用它 基类C# 未调用AutoMapper ConvertUsing,c#,generics,automapper-5,C#,Generics,Automapper 5,我想使用ConvertUsing转换基类的两个属性,但没有调用它 基类 public abstract class BaseDadoMestreViewModel { public DateTime UltimaAtualizacao { get; set; } public bool Excluido { get; set; } public bool Ativo { get; set; } } public abstract class BaseDadoMestre
public abstract class BaseDadoMestreViewModel
{
public DateTime UltimaAtualizacao { get; set; }
public bool Excluido { get; set; }
public bool Ativo { get; set; }
}
public abstract class BaseDadoMestre<TEntity> : EntityCrud<TEntity>
where TEntity : class
{
public DateTime UltimaAtualizacao { get; set; }
public string MarcadoEliminacao { get; set; }
public bool Desabilitado { get; set; }
}
public抽象类basedDomainStreeViewModel
{
公共日期时间Ultimatualizao{get;set;}
公共bool Excluido{get;set;}
公共bool-Ativo{get;set;}
}
公共抽象类basedDomainStre:EntityCrud
地点:班级
{
公共日期时间Ultimatualizao{get;set;}
公共字符串MarcadoEliminacao{get;set;}
公共bool Desabilitado{get;set;}
}
班级
public class CalendarioViewModel: BaseDadoMestreViewModel
{
public DateTime Data { get; set; }
}
public class CalendarioDTO: BaseDadoMestre<CalendarioDTO>
{
public DateTime Data { get; set; }
}
公共类CalendarioViewModel:BasedDomainStreeViewModel
{
公共日期时间数据{get;set;}
}
公共类CalendarioDTO:BasedAdminester
{
公共日期时间数据{get;set;}
}
IT类型转换器
public class BaseConverter<TEntity> :
ITypeConverter<BaseDadoMestre<TEntity>, BaseDadoMestreViewModel>,
ITypeConverter<BaseDadoMestreViewModel, BaseDadoMestre<TEntity>>
where TEntity : BaseDadoMestre<TEntity>
{
public BaseDadoMestreViewModel Convert(BaseDadoMestre<TEntity> source, BaseDadoMestreViewModel destination, ResolutionContext context)
{
destination.Excluido = (source.MarcadoEliminacao== "X");
destination.Ativo = !source.Desabilitado;
return destination;
}
public BaseDadoMestre<TEntity> Convert(BaseDadoMestreViewModel source, BaseDadoMestre<TEntity> destination, ResolutionContext context)
{
destination.MarcadoEliminacao = (source.Excluido ? null : "X");
destination.Desabilitado = !source.Ativo;
return destination;
}
}
公共类基类转换器:
ITYPE转换器,
IT类型转换器
地点:BaseDadoMestre
{
公共BasedOmeStreetViewModel转换(BasedOmeStre源、BasedOmeStreetViewModel目标、ResolutionContext上下文)
{
destination.Excluido=(source.MarcadoEliminacao==“X”);
destination.Ativo=!source.Desabilitado;
返回目的地;
}
公共BasedOmeStre转换(BasedOmeStreeViewModel源、BasedOmeStre目标、ResolutionContext上下文)
{
destination.MarcadoEliminacao=(source.Excluido?空:“X”);
destination.Desabilitado=!source.Ativo;
返回目的地;
}
}
最后是我的地图:
CreateMap(typeof(BaseDadoMestre<>), typeof(BaseDadoMestreViewModel)).ConvertUsing(typeof(BaseConverter<>));
CreateMap(typeof(BaseDadoMestreViewModel), typeof(BaseDadoMestre<>)).ConvertUsing(typeof(BaseConverter<>));
CreateMap<CalendarioDTO, CalendarioViewModel>()
CreateMap(typeof(BaseDadoMestre)、typeof(BaseDadoMestreViewModel)).ConvertUsing(typeof(BaseConverter));
CreateMap(typeof(BaseDadoMestreViewModel)、typeof(BaseDadoMestre)).ConvertUsing(typeof(BaseConverter));
CreateMap()
运行映射命令时,未调用ConvertUsing
mapper.Map<CalendarioViewModel>(new CalendarioDTO() { MarcadoEliminacao = "X", Desabilitado = true });
mapper.Map(新的CalendarioDTO(){MarcadoEliminacao=“X”,Desabilitado=true});
从Automapper文档中,您需要在为基类创建映射时指定继承,或者从派生类创建映射
勾选这个:
我尝试了这个,但它不起作用,它仍然无法运行ITypeConverter。我需要实现ITypeConverter,因为它们是泛型类,如果没有它,我无法编写转换,因为您无法将继承与转换结合使用。。。检查这里的答案:您可能需要在每个派生类型中为“Excluido”和“Ativo”进行映射谢谢,我搜索了,但找不到它,但有人已经得到了我需要的答案这似乎并没有解决这个问题,就像让您的DTO成为一个类似于BasedAdministreViewModel的非泛型类一样。定义非泛型类之间的映射,然后按照下面的建议使用Include或IncludeBase。使用MapFrom而不是ConvertUsing。