私はthis example on AutoMapper's GirHubを読んだが、例としてのみ、これまでInnerSourceをマッピングするための一つの方法、があります前提としています。私のプロジェクトではAutoMapper複雑にネストされたマッピング
Mapper.CreateMap<OuterSource, OuterDest>();
Mapper.CreateMap<InnerSource, InnerDest>();
Mapper.AssertConfigurationIsValid();
var source = new OuterSource
{
Value = 5,
Inner = new InnerSource {OtherValue = 15}
};
var dest = Mapper.Map<OuterSource, OuterDest>(source);
、私はEFことで作成したオブジェクトをシリアル化しています循環参照を持つ。その理由は、私は異なる方向からの物体に来る必要があるということです。たとえば、ユーザーのリストを要求すると、関連するプロジェクトが表示されます。私がプロジェクトを頼むと、そのプロジェクトに関連するユーザーを見たいと思う。
これらの循環参照がUser.Role.Project.TaskTime.User
、User.TaskTime.Project.Task.TaskType.VisibleToRole.Role.User
のように、かなり深い得ることができる、など
だから私はかなり深いように、ネストされたマッピングを必要とし、それに行うの方法は、最初のマッピングが何であったかに依存します。
現在、私はやってる:
Mapper.CreateMap<User, UserFull>()
.ForMember("TaskTimes", opt => opt.MapFrom(src => Mapper.Map<ICollection<TaskTime>, UserTaskTime>(src.TaskTimes)));
Mapper.CreateMap<TaskTime, UserTaskTime>()
.ForMember("Task", opt => opt.MapFrom(src => Mapper.Map<Task, UserTaskTimeTask>(src.Task)));
//...
のviewmodelsをそのスニペットのために次のようになります。この権利は
public class UserFull
{
public string Email { get; set; }
public string Name { get; set; }
public virtual ICollection<TaskTime> TaskTimes { get; set; }
//...
}
public class UserTaskTime
{
public int Id { get; set; }
public Task Task { get; set; }
//...
}
public class UserTaskTimeTask
{
//...
}
ですか?ビューモデルから各メンバーを投影し、投影を使って手動でマッピングする必要がありますか?それとももっとクリーンな方法がありますか?
オートマッパーを使用して、ViewModelの値をDBエンティティにマップしていますか?私はこれらの目的のためにAutoMapperを使用しないよう強くアドバイスし、それを手動で行います。そうしないと、マッピングのために古いものを使用する新しいエンティティを追加すると失敗し続ける複雑なマッパープロファイルになります。 –