Estou usando o Automapper e tenho o seguinte cenário: A classe OrderModel possui uma propriedade chamada 'ProductName' que não está no banco de dados. Então, quando eu tento fazer o mapeamento com:
Mapper.CreateMap<OrderModel, Orders>();
Isso gera uma exceção:
"As 1 propriedades a seguir no Project.ViewModels.OrderModel não estão mapeadas: 'ProductName'
Eu li no Wiki for Projections do AutoMapper o caso oposto (o atributo extra está no destino, não na fonte que é realmente o meu caso)
Como evitar o automapper para fazer o mapeamento dessa propriedade?
Respostas:
De Jimmy Bogard:
CreateMap<Foo, Bar>().ForMember(x => x.Blarg, opt => opt.Ignore());
Está em um dos comentários em seu blog .
fonte
CreateMap<Foo, Bar>().ForSourceMember(x => x.Blarg, opt => opt.Ignore());
pode ser útilCreateMap<SourceType, DestType> (MemberList.Source).ForSourceMember(x => x.MySourceProperty, opt => opt.DoNotValidate())
:?Ignore()
permanece a sintaxe correta. Isso ocorre porque a alteração de sintaxeIgnore
foi feita naISourceMemberConfigurationExpression
interface, mas não naIMemberConfigurationExpression`3
interface separada .Eu sou talvez um pouco perfeccionista; Eu realmente não gosto da sintaxe ForMember (..., x => x.Ignore ()). É uma coisinha, mas é importante para mim. Eu escrevi este método de extensão para torná-lo um pouco melhor:
Pode ser usado assim:
Você também pode reescrevê-lo para trabalhar
params
, mas eu não gosto da aparência de um método com muitas lambdas.fonte
params
: Você poderia retornar uma matriz de seletores de dentro de um único lambda, em seguida, mapear sobre cada seletor comforeach
ouSelect()
Talvez não menos confuso para o futuro, no entanto.Você consegue fazer isso:
fonte
Apenas para quem tenta fazer isso automaticamente, você pode usar esse método de extensão para ignorar propriedades não existentes no tipo de destino:
para ser usado da seguinte forma:
graças a Can Gencer pela dica :)
fonte: http://cangencer.wordpress.com/2011/06/08/auto-ignore-non-existing-properties-with-automapper/
fonte
'Mapper' does not contain a definition for 'GetAllTypeMaps' [DSSTools]
..Mapper.Configuration.GetAllTypeMaps()
fonteAgora existe (AutoMapper 2.0) um
IgnoreMap
atributo que eu vou usar em vez da sintaxe fluente que é um IMHO um pouco pesado.fonte
IgnoreMapAttribute
.Ao mapear um modelo de exibição de volta para um modelo de domínio, pode ser muito mais simples validar a lista de membros de origem em vez da lista de membros de destino
Agora, minha validação de mapeamento não falha, exigindo outra
Ignore()
, sempre que adiciono uma propriedade à minha classe de domínio.fonte
Pode usar IgnoreAttribute na propriedade que precisa ser ignorada
fonte
[IgnoreMap]
deIgnoreMapAttribute
Olá a todos Por favor, use isso, está funcionando bem ... para o mapeador automático usar vários .ForMember em C #
fonte