3

Automapperを使用してEFオブジェクトをDTOにマップしています。オブジェクトの多くは、多対多の配置になっています。例えば:

committee (table) 1 =< m  committeemember (table)  m >= 1 person (table)

これは次のようにマッピングされる可能性があります。

public class CommitteeViewModel
{
    public int idCommittee { get; set; }
    public IEnumerable<CommitteeMemberViewModel> CommitteeMembers { get; set; }
}

public class CommitteeMemberViewModel
{
    public int idCommittee { get; set; }
    public int idCommitteeMember { get; set; }
    public PersonViewModel Members { get; set; }
}

<committee, CommitteeViewModel>また、、、およびのAutomapperマップが<committeemember, CommitteeMemberViewModel>あり<person, PersonViewModel>ます。

私が単一の委員会とそのメンバーを返還したいときは、すべてが順調です。

しかし、メンバーのいない委員会のリストが必要な場合、その呼び出しのためだけに、Automapperに特定のプロパティを無視するように依頼する方法はありますか?のようなもの:

var committeeList = Automapper.Mapper.Map
    <List<committee>, List<CommitteeViewModel>>(committees)
   .Ignore("CommitteeMembers");

もちろん、これらのプロパティを省略してそれらにマップする新しいDTOを作成することはできますが、基本的に1つのプロパティ以外のすべて必要なので、別のマップを作成するなど、より良い方法があると思いましたが、それを見つける。

ありがとう、

g。

4

1 に答える 1

2

次の方法で目的の結果を得ることができます。新しいマッピングを作成し(つまり、既存のマッピングを上書きし)、ソースエンティティをマップし、マッピングをオーバーライドします。

Mapper.CreateMap<committee, CommitteeViewModel>()
      .ForMember(c => c.CommitteeMembers, o => o.Ignore());

var committeeList = Mapper
      .Map<List<committee>, List<CommitteeViewModel>>(committees);

Mapper.CreateMap<committee, CommitteeViewModel>();

しかし、私は物事の一貫性を保つ方が良いと思います。委員会からCommitteeViewModelにマッピングすると、毎回同じ結果が得られると思います。したがって、「ライト」バージョンのマッピング用に新しいビューモデルを作成することをお勧めします。

于 2012-11-19T18:50:47.407 に答える