2

フラットなPOCOエンティティと構造化されたビューモデル(カスタムEditorForヘルパーを使用してフォームをレンダリングするために使用されます)があります。

Automapper 2で次のようなことを行う簡単な方法はありますか?

cfg.CreateMap<TelcoDemand, TelcoDemandViewModel>()
.ForMember(d => d.Person, opt => opt.ResolveUsing(s => new PersonViewModel
    {
        FirstName = s.PersonFirstName,
        LastName = s.PersonLastName,
        Phone = s.PersonPhone,
        Email = s.PersonEmail
    }))
.ForMember(d => d.AddressContact, opt => opt.ResolveUsing(s => new AddressViewModel
    {
        City = s.AddressContactCity,
        HouseNumber = s.AddressContactHouseNumber,
        Street = s.AddressContactStreet,
        Zip = s.AddressContactZip
    }))
.ForMember(d => d.AddressCourier, opt => opt.ResolveUsing(s => new AddressViewModel
    {
        City = s.AddressCourierCity,
        HouseNumber = s.AddressCourierHouseNumber,
        Street = s.AddressCourierStreet,
        Zip = s.AddressCourierZip
    }))
.ForMember(d => d.Address, opt => opt.ResolveUsing(s => new AddressViewModel
    {
        City = s.AddressCity,
        HouseNumber = s.AddressHouseNumber,
        Street = s.AddressStreet,
        Zip = s.AddressZip
    }))

私が達成しようとしているのは、PersonフィールドとAddressフィールドをビューモデルにフラット化せず、EditorForを使用してレンダリングすることです。

データベースにフラット化することはうまく機能しますが、慣例によりフラット化を解除する方法はありません...

編集

ここで使用されているIgnoreAllUnexisting拡張機能もあり、次のように実装されています。

public static IMappingExpression<TSource, TDestination> IgnoreAllNonExisting<TSource, TDestination>(this IMappingExpression<TSource, TDestination> expression)
{
    var sourceType = typeof(TSource);
    var destinationType = typeof(TDestination);
    var existingMaps = Mapper.GetAllTypeMaps().First(x => x.SourceType == sourceType && x.DestinationType == destinationType);
    foreach (var property in existingMaps.GetUnmappedPropertyNames())
    {
        expression.ForMember(property, opt => opt.Ignore());
    }
    expression.ForAllMembers(opt => opt.Condition(src => !src.IsSourceValueNull));
    return expression;
}

とにかく、私もその拡張機能なしでそれを試しました、そして結果はまったく同じでした-複合型のnull値の束。

4

0 に答える 0