2
UserAccount objUserAccount=null;
AutoMapper.Mapper.CreateMap<AccountBO, UserAccount>();
objUserAccount = AutoMapper.Mapper.Map<AccountBO, UserAccount>(lstAcc[0]);

この時点までは、AccountBOプロパティをうまくマッピングしています。

ここで、上記のマップされた値を含めて、オブジェクトobjAddressBOプロパティを宛先にマップする必要があります。このために、上記のコード行に続いて、以下のようにコードを記述しました。

AutoMapper.Mapper.CreateMap<AddressBO,UserAccount>();
objUserAccount=AutoMapper.Mapper.Map<AddressBO,UserAccount>(objAddressBO);

しかし、初めてマップされた値が失われ、最後にマップされた値のみが返されます。

宛先オブジェクトに両方の値を含めるために必要な変更を教えてください。

4

1 に答える 1

6

マッピングは1回だけ構成する必要があります。これを行う最良の方法は、プロファイルを使用することです。

public class MyProfile : Profile
{
    public override string ProfileName
    {
        get
        {
            return "MyProfile";
        }
    }

    protected override void Configure()
    {
        AutoMapper.Mapper.CreateMap<AccountBO, UserAccount>();
        AutoMapper.Mapper.CreateMap<AddressBO,UserAccount>();
    }
}

次に、これを初期化方法(App_StartWebプロジェクトなど)で初期化する必要があります。

また、マッピングが正しく構成されていることをテストするための単体テストを作成する必要があります

[TestFixture]
public class MappingTests
{
    [Test]
    public void AutoMapper_Configuration_IsValid()
    {
        Mapper.Initialize(m => m.AddProfile<MyProfile>());
        Mapper.AssertConfigurationIsValid();
    }
}

それがすべて正常に機能し、質問を正しく理解したと仮定して、から初期化objUserAccountしてからlistAcc[0]、からいくつかの追加パラメーターを入力しobjAddressBOます。あなたはこれを次のように行うことができます:

objUserAccount = Mapper.Map<AccountBO, UserAccount>(lstAcc[0]);
objUserAccount= Mapper.Map(objAddressBO, objUserAccount);

最初のマップはオブジェクトを作成し、2番目のマップは提供された宛先オブジェクトを更新します。

これが正しく機能するためには、正しい動作を提供するためにマッピング構成を少し入力する必要がある場合があることに注意してください。たとえば、宛先プロパティの更新を避けたい場合は、UseDestinationValueディレクティブを使用できます。Condition更新に条件を適用する場合は、ディレクティブを使用できます。プロパティを完全に無視したい場合は、Ignoreディレクティブを使用できます。

必要に応じて、その他のドキュメントはここにあります。

于 2012-12-13T20:10:24.923 に答える