ドメインモデルのプロパティをサービスレイヤを介して提供されるDTOにマップするのにValueInjecterを使用しています。問題のサービスも更新を受け付けます...更新されたDTOが渡され、これがドメインオブジェクトに注入されて保存されます。値インジェクタ: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;
}
上記のすべてのコードは、私が必要とするものではない明らかにProperty Member.Country.Codeの更新です。ドキュメントからそう
は、私がオーバーライドを作成するために必要な考え出し、これを得た:
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;
}
私の問題はCountryLookupが呼び出されることは決してありません、デバッグ中です。私は考えることができる
考えられる理由:
- 国の型と一致しないために値の挿入器を引き起こしてNHibernateのプロキシクラス?これは平坦化中に機能するため意味がありません。
- おそらく、何らかの理由で非平坦化が起こっていない可能性があります。すなわちDTOは、国番号とドメインがCountry.Code
である私は、更新の注入の際に使用する正しいオブジェクトを返すようにcountryService.LookupCodeを呼び出すためにDTO上のCountryCodeプロパティを使用する必要があります。
あなたが達成しようとしていることを教えてください。最初の試みは機能しますが、必要なものではありません。何が必要ですか? – Omu
CountryLookupという名前のあなたのインジェクションは、stringからCountryへのunflatを意味します。つまり、string型のCountryCodeから値を取得し、それを国番号 – Omu
のCountry.Codeに入れます@Omu thats correct Country Country:Country :USA、Name:United States}と私のDtoはCountryCodeで渡します: "CA"はCountry.CodeプロパティをCAに設定し、 'Name'プロパティを米国のままにします。前もって設定されたドメインオブジェクトを更新していることを思い出してください...これにより、正しいCountryオブジェクトを検索するためにcountryServiceを呼び出す必要があります。私はDtoから 'Code'を取得し、そのコードを使用して正しいCountryオブジェクトを検索します。 – Galen