En AutoMapper 2.0 utilicé Perfiles para configurar mi asignación. Uso SourceMemberNameTransformer
y DestinationMemberNameTransformer
para que coincidan mis nombres de propiedad de origen y destino.Miembro perdido en AutoMapper 2.1.265
En 2.1.265 estas propiedades ya no están en el perfil. ¿Alguien sabe por qué fueron eliminados? Pero más importante aún, ¿cómo puedo duplicar esta funcionalidad?
Editar
He estado buscando en la SourceMemberNamingConvention
y DestinationMemberNamingConvention
, pero no puedo encontrar ninguna documentación en cuanto a cómo los trabajos. ¿Alguien tiene experiencia usando un INamingConvention
personalizado?
Editar 2
miembros de origen se generan a partir de una base de datos tercera parte. Por lo general, usan todos los nombres de las columnas en minúsculas con guiones bajos entre las palabras. Algunas veces dejan de subrayar, a veces arrojan mayúsculas al azar.
Los miembros del destino intentan seguir las convenciones de nombres de .NET tanto como sea posible. Se eliminaron los signos de subrayado, el primer carácter que sigue al guión bajo se escribe en mayúscula. Se hicieron cambios de caso adicionales para hacer que los nombres de los miembros sean más fáciles de leer.
Para solucionar esto, puse
SourceMemberNameTransformer = name => name.Replace("_", "").ToUpper()
DestinationMemberNameTransformer = name => name.ToUpper()
Datos 3
Más información para la gente del futuro.
Inspeccioné la fuente para ver cómo se usa INamingConvention
. La forma en que está diseñado es un poco engañoso. La interfaz está befined como
public interface INamingConvention
{
Regex SplittingExpression { get; }
string SeparatorCharacter { get; }
}
Sin embargo, no se AutoMapper usuario la definición completa de la interfaz para ambos SourceMemberNamingConvention
y DestinationMemberNamingConvention
Se toma cada miembro del tipo de destino y se aplica DestinationMemberNamingConvention.SplittingExpression
. Luego toma esas partes coincidentes y llama al string.Join
usando SourceMemberNamingConvention.SeparatorCharacter
. A continuación, intenta hacer coincidir los miembros del tipo de fuente con los miembros del tipo de destino.
Esta es una descripción general de alto nivel de lo que se hace y no es un intento de describir la funcionalidad completa. Simplemente está destinado a mostrar cómo se usa INamingConvention
y para mostrar que SourceMemberNamingConvention.SplittingExpression
y DestinationMemberNamingConvention.SeparatorCharacter
nunca se utilizan.
Si no puede transformar los miembros de destino usando esta estrategia, entonces debe mapear manualmente las propiedades como nemesv's answer sugiere.
Sí, ya lo he visto. Esto no me ayuda, ya que no hago nada con prefijos o postfixes. – cadrell0
¿Podría darnos un ejemplo que muestre qué está tratando de lograr? – nemesv
He actualizado la pregunta – cadrell0