所以我有我的地图:
public class BlogToBlogModelAutoMapperTypeConfigurator: IAutoMapperTypeConfigurator
{
public void Configure()
{
Mapper.CreateMap<Blog, GUI.Models.Blogging.Blog>()
.ForMember(b => b.User, c => c.Ignore())
.ForMember(b => b.Posts, c=>c.Ignore());
}
}
public class PostToPostModelAutoMapperTypeConfigurator : IAutoMapperTypeConfigurator
{
public void Configure()
{
Mapper.CreateMap<Post, GUI.Models.Blogging.Post>()
.ForMember(p => p.User, c => c.Ignore());
}
}
public class UserToUserModelAutoMapperTypeConfigurator : IAutoMapperTypeConfigurator
{
public void Configure()
{
Mapper.CreateMap<User, GUI.Models.Blogging.User>()
.ForMember(u => u.UserId, c => c.MapFrom(u => u.Id));
}
}
现在,您可以看到我没有映射&#34;导航&#34; GUI.Models
我使用此代码抓取实体 精制 :
using (var unitOfWork = this.unitOfWorkFactory.Create(LockType.Read))
{
var allResult = blogRepository.Retrieve().Join(
userRepository.Retrieve(),
b => b.UserId,
u => u.Id,
(blog, user) =>
Mapper.Map<GUI.Models.Blogging.Blog>(blog)
).GroupJoin(
postRepository.Retrieve(),
b => b.Id,
p => p.BlogId,
(blog, posts) =>
{
blog.Posts = Mapper.Map<IList<GUI.Models.Blogging.Post>>(posts);
return blog;
}
);
return View(result.ToArray());
}
如您所见,每个Mapper.Map
都需要List
posts
通过,或user
通过。
我不确定如何将这一切联系在一起。
答案 0 :(得分:0)
使用块需要如下所示:
using (var unitOfWork = this.unitOfWorkFactory.Create(LockType.Read))
{
var allResult = blogRepository.Retrieve().Join(
userRepository.Retrieve(),
b => b.UserId,
u => u.Id,
(blog, user) => new
{
blog,
user
}
).GroupJoin(
postRepository.Retrieve(),
b => b.blog.Id,
p => p.BlogId,
(anon, posts) => new
{
anon.blog,
anon.user,
posts
}
);
// here the allResult variable needs to get iterated by two selects
// the first select will use automapper to map each entity into another anonymouse type
// the second select will then put the user and posts into the blog and return the blog
return View(allResults);
}
所以第一个选择看起来像这样:
allResults.Select(x => new
{
BlogDto = Mapper.Map<BlogDto>(x.blog),
UserDto = Mapper.Map<UserDto>(x.user),
PostDtos = Mapper.Map<IEnumerable<PostDto>(x.posts)
});
第二个选择只会将它们组合成一个博客:
allResults.Select(firstSelect).Select(x =>
{
x.BlogDto.User = x.UserDto;
x.BlogDto.Posts = x.PostDtos;
return x.BlogDto;
}
然后,这将为您提供IEnumerable<BlogDto>
,其中包含视图所需的所有信息。