Sto utilizzando ValueInjecter per mappare le proprietà da un modello di dominio a un DTO servito tramite un livello di servizio. Il servizio in questione accetta anche gli aggiornamenti ... quindi viene passato un DTO aggiornato che viene quindi iniettato nell'oggetto dominio e salvato.Valore Injecter: Dto to Domain Model (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;
}
Ora tutto questo codice di cui sopra non fa altro che aggiorna il Member.Country.Code proprietà che ovviamente non è quello che ho bisogno di fare.
Così dalla documentazione, ho pensato che avevo bisogno di creare un override e ottenuto questo:
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;
}
Il mio problema è durante il debug, CountryLookup non viene mai chiamato.
Possibili motivi che mi vengono in mente:
- classi NHibernate proxy causando valore injecter di non corrispondere al tipo di paese? Questo non ha senso perché funziona durante l'appiattimento.
- Forse lo spiattellamento non spara per qualche motivo. Cioè Dto è CountryCode e dominio è Country.Code
ho bisogno di utilizzare la proprietà CountryCode sul Dto per chiamare un countryService.LookupCode per restituire l'oggetto corretto da utilizzare durante l'iniezione di aggiornamento.
dicci cosa stai cercando di ottenere, il primo tentativo funziona, ma non è quello che ti serve, di cosa hai bisogno? – Omu
l'iniezione denominata CountryLookup verrà sparpagliata da stringa a Paese, il che significa che ottiene il valore da CountryCode di tipo stringa e lo inserisce in Country.Code del tipo Paese – Omu
@Omu che è corretto, ad esempio se l'oggetto Paese è Paese: {Codice : USA, Name: United States} e my Dto passa in CountryCode: "CA" imposta semplicemente la proprietà Country.Code su CA e lascia la proprietà 'Name' come Stati Uniti. Ricorda che sto aggiornando un oggetto dominio pre-popolato ... Per questo motivo ho bisogno di chiamare il mio countryService per cercare l'oggetto Paese corretto. Voglio acquisire il 'Codice' da Dto e quindi utilizzare quel codice per cercare l'oggetto Paese corretto. – Galen