Używam ValueInjecter do mapowania właściwości z modelu Domeny do DTO serwowanego za pośrednictwem Warstwy usługi. Usługa, o której mowa, akceptuje również aktualizacje ... tak, że zaktualizowany DTO jest przekazywany, a następnie jest on wstrzykiwany do obiektu domeny i zapisywany.Wartość Injecter: Dto do Modelu Domeny (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;
}
Teraz wszystko to powyższy kod robi to aktualizuje Member.Country.Code nieruchomości, która nie jest oczywiście to, co muszę zrobić.
Więc z docs, pomyślałem, że muszę stworzyć nadpisanie i dostał to:
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;
}
Mój problem jest podczas debugowania, CountryLookup nigdy nie jest wywoływana.
Możliwe przyczyny mogę myśleć:
- klas Nhibernate Proxy powodując wartość injecter nie pasuje typ kraju? To nie ma sensu, ponieważ działa podczas spłaszczania.
- Być może niezwiązanie z jakiegoś powodu nie zwalnia. Tj Dto jest CountryCode i domeny jest Country.Code
muszę użyć właściwości CountryCode na Dto wywołać countryService.LookupCode powrót poprawny obiekt używać podczas iniekcji aktualizacji.
powiedz nam, co próbujesz osiągnąć, pierwsza próba działa, ale nie jest to, czego potrzebujesz, czego potrzebujesz? – Omu
Twoja iniekcja o nazwie CountryLookup zostanie rozwinięta z ciągu znaków do kraju, co oznacza, że chce uzyskać wartość z kodu krajowego typu i umieścić go w kodzie kraju o typie kraju – Omu
@Omu jest to poprawne, na przykład, jeśli mój obiekt Country to Kraj: {kod : USA, Name: United States} i moje DTO przechodzi w CountryCode: "CA" po prostu ustawia właściwość Country.Code na CA i pozostawia właściwość 'Name' jako Stany Zjednoczone. Pamiętaj, że aktualizuję wstępnie wypełniony obiekt domeny ... Z tego powodu muszę wywołać mój countryService w celu wyszukania poprawnego obiektu Country. Chcę przechwycić "Kod" z DTO, a następnie użyć tego kodu do wyszukania właściwego obiektu Country. – Galen