Estoy usando ValueInjecter para mapear propiedades desde un modelo de Dominio hasta una DTO servida a través de una Capa de Servicio. El servicio en cuestión también acepta actualizaciones ... por lo que se transfiere una DTO actualizada que luego se inyecta al objeto de dominio y se guarda.Inyector de valor: Dto al modelo de dominio (NHibernate)
// Domain
public class Member
{
public Country Country { get; set; }
}
public class Country
{
public string Code { get; set; }
public string Name { get; set; }
}
//Dto
public class MemberDto
{
public string CountryCode { get; set; }
}
//Transformation Method attempt 1
public Member InjectFromDto (MemberDto dto, Member source)
{
source = source.InjectFrom<UnflatLoopValueInjection>(dto);
return source;
}
Todo esto hace es el código de seguridad actualiza la propiedad Member.Country.Code lo que obviamente no es lo que necesito hacer.
Así que a partir de los documentos, que pensé que necesitaba para crear una anulación y tiene esto:
public class CountryLookup: UnflatLoopValueInjection<string, Country>
{
protected override Country SetValue(string sourcePropertyValue)
{
return countryService.LookupCode(sourcePropertyValue);
}
}
//revised transformation call
//Transformation Method attempt 2
public Member InjectFromDto (MemberDto dto, Member source)
{
source = source.InjectFrom<UnflatLoopValueInjection>(dto)
.InjectFrom<CountryLookup>(dto);
return source;
}
Mi problema es durante la depuración, CountryLookup nunca se llama.
Las posibles razones que se me ocurren:
- clases Nhibernate proxy causando valor injecter que no coincide con el tipo de país? Aunque esto no tiene sentido porque funciona durante el aplanamiento.
- Quizás el unflattening no se dispare por alguna razón. Es decir Dto es countryCode y Dominio es COUNTRY.CODE
necesito utilizar la propiedad countryCode en el Dto para llamar a un countryService.LookupCode para devolver el objeto correcto a utilizar durante la inyección de actualización.
dinos qué intentas lograr, el primer intento funciona, pero no es lo que necesitas, ¿qué necesitas? – Omu
su inyección llamada CountryLookup desentrelazará de cadena a País, lo que significa que busca obtener el valor de CountryCode de tipo cadena y ponerlo en País.Código del tipo País – Omu
@Omu eso es correcto así que por ejemplo si mi País es País: {Código : USA, Nombre: Estados Unidos} y mi Dto pasa en CountryCode: "CA" simplemente establece la propiedad Country.Code en CA y deja la propiedad 'Name' como Estados Unidos. Recuerde que estoy actualizando un objeto de dominio rellenado previamente ... Debido a esto, debo llamar a mi paísServicio para buscar el objeto Country correcto. Quiero capturar el 'Código' del Dto y luego usar ese código para buscar el objeto Country correcto. – Galen